Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
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: 12112
...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


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
ECOVACS DEEBOT T50 PRO OMNI Gen2 fa piaz...
Windelo 62: catamarano a vela che unisce...
Francia, in arrivo un incentivo di 1.000...
Haier, la sorpresa a IFA: la lavatrice C...
GeForce RTX 5000 SUPER in arrivo? Sembra...
Ionity prova una soluzione contro i ladr...
Pirateria, svolta clamorosa: Dazn e Lega...
Maxi richiamo Toyota e Lexus: oltre 900....
Blackwell Ultra: fino al 45% di prestazi...
Neuralink: 12 pazienti hanno usato l'imp...
Amazon sorprende tutti oggi: valanga di ...
A19 e A19 Pro: Apple svela le differenze...
NASA: inizia l'esperimento CHAPEA per si...
DAZN rischia sanzioni milionarie per pub...
Invasione di gamer a Montecatini Terme: ...
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: 15:50.


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