Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-08-2005, 16:28   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C#]Lavorare con le classi

Altro problema della giornata

Allora,sono riuscito a trovare degli esempi che mi hanno consentito di collegarmi tramite C# ad un db mysql e di leggerne da console il contenuto e fare qualche piccola operazione.Ora,non contento di questo,mi era venuta la malsana idea di creare anche una piccola interfaccia grafica.Ad ogni modo,il grande e paziente vicius mi ha consigliato di cominciare a pensare a crearmi delle classi,per scomporre il problema in tanti problemini più piccoli.

Allora,per quanto riguarda la connessione al database,ho fatto così:
Codice:
using System;
using System.Data;
using ByteFX.Data.MySqlClient;
 
 
 class Connessione
 {
    public Connessione(string[] args)
    {
       
       public string connectionString = 

                        "Server=localhost;" +
                        "Database=presenze;" +
                        "User ID=raoul;" +
                        "Password=quellochevolete;";	 		                 
       
       IDbConnection dbcon;
       dbcon = new MySqlConnection(connectionString);
       dbcon.Open();
       IDbCommand dbcmd = dbcon.CreateCommand();
      
       public string sql = "SELECT codice, MIN(orario) AS Ingresso, MAX(orario) AS Uscita, (MAX(orario) - MIN(orario)) " + 
                           " AS ore FROM rilievi" +
       			   " WHERE codice = '0017' " +
                           " GROUP BY codice" ;
       
       dbcmd.CommandText = sql;
       
       IDataReader reader = dbcmd.ExecuteReader();
       
       while(reader.Read()) {
            string Codice = (string) reader["codice"];
            string Ingresso = (string) reader["ingresso"].ToString();
            string Uscita = (string) reader["uscita"].ToString();
            string Ore = (string) reader["ore"].ToString();
            
            
       }
       // chiudi le connessioni
       reader.Close();
       reader = null;
       dbcmd.Dispose();
       dbcmd = null;
       dbcon.Close();
       dbcon = null;
    }
}
E questo l'ho salvato in un file che ho chiamato connessione.cs
Ora, nel file Main.cs ho:

Codice:
using System;
using System.Data;
using ByteFX.Data.MySqlClient;
using Gtk;
using Glade;
 
 
public class Test 
 {
    public static void Main(string[] args)
    {
       
       
       Console.WriteLine("Name: " + Codice + Ingresso + Uscita + "   " + "Totale: " + Convert.ToDouble(Ore));
       
     
    }
}
Allora, se lavoro in un unico file, ad esempio il Main.cs non ho problemi e funziona.

Nel caso quindi di una classe contenuta in un altro file,come dico al main di prendermi i valori da li?

RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 24-08-2005, 16:31   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
opporc!!

Ho sbagliato sezione

Si può spostare per favore moderatori?

Thx.


RaouL.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 07:52   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Spostato
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 09:27   #4
Brazorv
Member
 
Iscritto dal: Aug 2004
Messaggi: 156
ciao
ho provato a modificare la tua classe però non la posso provare ora
Codice:
using System;
using System.Data;
using ByteFX.Data.MySqlClient;
 
namespace ProvaMysql{
	class Connessione
	{
		
		private string connectionString;
		private IDbConnection dbcon;
		private IDbCommand dbcmd;
		private string sql;
		private IDataReader reader;
		
		
		public Connessione()
		{
			
			connectionString = "Server=localhost;" +
				"Database=presenze;" +
				"User ID=raul;" +
				"Password=quellochevolete;";
			
			
			dbcon = new MySqlConnection(connectionString);
			dbcon.Open();
			
			
			
		}
		
		public void Comando(){
			dbcmd = dbcon.CreateCommand();
			sql = "SELECT codice, MIN(orario) AS Ingresso, MAX(orario) AS Uscita, (MAX(orario) - MIN(orario)) " +
				" AS ore FROM rilievi" +
				" WHERE codice = '0017' " +
				" GROUP BY codice" ;
			
			dbcmd.CommandText = sql;
			
			reader = dbcmd.ExecuteReader();
			
			while(reader.Read()) {
				Console.WriteLine(reader["codice"] + " " + 
				" " + reader["ingresso"] + " " +  reader["uscita"] + 
				" " +  reader["ore"]);
			}
		}
		// chiudi le connessioni
		~Connessione(){
			reader.Close();
			reader = null;
			dbcmd.Dispose();
			dbcmd = null;
			dbcon.Close();
			dbcon = null;
		}
	}
}
ho diviso il tuo codice in 3 metodi
il costruttore crea la connessione
il metodo comando esegue il comando contenuto nella stringa sql e stampa il risultato
il metodo ~Connessione() è il distruttore dovrebbe chiudere la connessione e liberare le risorse
il main è così
Codice:
using System;
 
namespace ProvaMysql
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			Connessione con = new Connessione();
			
			con.Comando();
		
			
		}
	}
}
creo un nuovo oggetto di tipo Connessione, quando chiami il costruttore dovrebbe anche aprire la connessione al database
con.comando() esegue il comando e stampa
quando l'oggetto con viene distrutto dal Garbage Collector, viene chiamato il distruttore che libera le risorse
Provalo spero che funzioni io ora non ho un server MySql per provarlo
P.S. Che libro usi per studiare C#?
P.P.S. dove trovo la documentazione di ByteFX?

Ultima modifica di Brazorv : 25-08-2005 alle 09:33.
Brazorv è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 09:35   #5
VICIUS
Senior Member
 
L'Avatar di VICIUS
 
Iscritto dal: Oct 2001
Messaggi: 11471
Io avrei separato il codice in questo modo.
Codice:
using System;
using System.Data;
using ByteFX.Data.MySqlClient;


class Connessione 
{
	private IDbConnection conn;
	
	public Connessione(string  host, string db, string user, string passwd)
	{
		string connectionString = "Server="+host+";"  +
                        		  "Database="+db+";"  +
                                  "User ID="+user+";" +
                                  "Password="+passwd+";" ;

		conn = new MySqlConnection (connectionString);
		conn.Open();
	}
	
	public IDataReader EseguiQuery()
	{
		string sql = "SELECT codice, MIN(orario) AS Ingresso, " +
		             " MAX(orario) AS Uscita, (MAX(orario) - MIN(orario)) " + 
                     " AS ore FROM rilievi" +
                     " WHERE codice = '0017' " +
                     " GROUP BY codice" ;

        IDbCommand cmd = conn.CreateCommand();
        cmd.CommandText = sql;
		
		return cmd.ExecuteReader();
	}

}
Certo pero Connessione e EseguiQuery non sono due nomi molto significativi.

ciao
VICIUS è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 09:53   #6
Brazorv
Member
 
Iscritto dal: Aug 2004
Messaggi: 156
ho provato il codice che ho scritto sopra e mi da un eccezione:

Unhandled Exception: ByteFX.Data.MySqlClient.MySqlException: Client does not sup
port authentication protocol requested by server; consider upgrading MySQL client

uso Mysql 4.1 e ByteFx 0.76 su Windows
sapete dirmi come risolvere il problema?
Brazorv è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 14:03   #7
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
@ Brazorv:

Io ho le stesse versioni tue ma non è che ti da un'eccezione perchè usi delle parole chiave che fanno parte della libreria ByteFx per dichiarare variabili?!?

Inoltre:

Grazie ad entrambi per i suggerimenti ma sono ancora abbastanza confuso

Non riesco a trovare una guida (in qualsiasi lingua) che tratti il concetto di "classi" partendo dal presupposto che non le si sia mai affrontate prima.Su tutte le guide che sto seguendo,è come se il concetto di classe sia qualcosa di talmente scontato che non lo trattano "per newbie"
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 15:28   #8
^TiGeRShArK^
Senior Member
 
L'Avatar di ^TiGeRShArK^
 
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12103
...in qualke libro di c++ hai provato??? o magari di java...
se nn sbaglio in quello di bruce eckel thinking in java ne parla.....
cmq puoi vedere la definizione di una classe come la definizione formale e completa di un oggetto, con tutte le variabili globali utilizzabili dall'oggetto (ad esempio per un libro potrebbero essere num di pagine, autore, titolo, ecc.), quindi c'è il costruttore ke è il metodo primario che si occupa della corretta inizializzazione della classe, e anzi ci possono essere un certo numero di costruttori che differiscono solo per il tipo o il numero dei parametri.
Ad esempio nella classe che dovevi usare tu per accedere a mysql la cosa migliore è crearsi la connessione al server nel costruttore.
Se fosse stato una classe Libro avresti dovuto inizializzare tutte le informazioni ke lo caratterizzano (le variabili di cui sopra), magari utilizzando dei parametri ke hai passato al costruttore.
Inoltre ogni classe che si rispetti deve anche avere dei metodi (anche se non è per nulla obbligatorio). Questi metodi sono delle particolari "funzioni" che agiscono sull'istanza dell'oggetto creato modificandone lo stato o facendolo agire su altri oggetti.....
Infine c'è il distruttore che si occupa di liberare le risorse occupate dal tuo oggetto una volta che il suo scopo è finito.
A questo punto dovrei spiegarti perchè prima ho parlato di "istanza" di classe.....
Praticamente quella che hai fatto tu e che hai chiamato genericamente classe è in realtà la definizione della classe.
Quando invece viene invocato il costruttore (Libro dune=new Libro("Frank Herbert")) viene istanziata la classe che hai definito, creando un oggetto dune avente tutte le caratteristiche dichiarate nella tua classe e che lo inizializza sfruttando il costruttore che riceve come parametro una stringa.
In questo modo il tuo oggetto dune sarà un istanza della classe Libro e la sua variabile privata "autore" avrà il valore "Frank Herbert".
Nulla ti vieta di utilizzare degli altri oggetti di tipo libro (sacraBibbia, starWars) che dovranno seguire sempre le specifiche di base dettate dalla definizione della classe, ma che avranno i VALORI di queste caratteristiche diversi l'uno dall'altro.
Ora....perchè t ho smarruggiato i neuroni x spiegarti che un oggetto è un'istanza della definizione di una classe da te specificata?????
perchè vi sono delle particolari variabili o dei particolari metodi di una classe che sono chiamati "statici".
Ovvero questi metodi non cambiano dinamicamente a seconda dell'oggetto che stiamo utilizzando (dune, robinHood), ma sono uguali x tutte le istanze delle classi.....
Ad esempio... la costante Pi Greco può essere definita come una costante statica, poichè essa DEVE avere lo stesso valore per tutte le differenti istanze della classe.
O ad esempio il metodo coseno (dato ke siamo in tema ) avrà un implementazione comune per tutte le classi.
L'utilizzo di questi metodi statici è ad esempio il seguente:
Math.sin(3.14)
ke richiama il metodo statico sin della classe Math.
Inoltre anche il metodo main è un metodo statico, questo perchè non è variabile a seconda delle istanze della classe, ma deve essere uguale per tutte.
...Probabilmente mi sto dimenticando una marea di cose.....quasi certamente ti ho confuso ancora di più........
cmq prova a guardare nei libri che ti dicevo prima.... magari riesci a chiarirti un pò meglio il concetto di classe!
__________________
^TiGeRShArK^ è offline   Rispondi citando il messaggio o parte di esso
Old 25-08-2005, 18:59   #9
Brazorv
Member
 
Iscritto dal: Aug 2004
Messaggi: 156
io sto usando questo libro "C# How to Program" di Deitel & Deitel. spiega bene la programmazione ad oggetti, ed è pieno di esempi.
Brazorv è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Il rover NASA Perseverance ha ''raccolto...
NASA e ISRO hanno lanciato il satellite ...
Switch 2 ha venduto 5,82 milioni di cons...
Assassin's Creed Black Flag Remake: le m...
Cosa ci fa una Xiaomi SU7 Ultra alle por...
Promo AliExpress Choice Day: prezzi stra...
Nostalgico, ma moderno: il nuovo THEC64 ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v