Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C#] Dialogo fra le classi

    Scusate la domandaccia fatta proprio da principiante...
    ma come passo un valore fra due classi diverse?

    io ho provato a derivare la classe nel modo solito ( class A : B) ma non funziona...
    mi spiego meglio

    ho due classi.
    la prima dove definisco tutto ciò che occorre per conettermi ad un DB e caricarlo di dati...

    la seconda dovrebbe essere usata per aggiornare i dati di una tabella...ma il valore del DataAdapter che ho assegnato nella prima e che dovrei recuperare per essere usato nella seconda non riesco a leggerlo....

    codice:
    using System;
    using System.Data;
    using System.Data.Common;
    using System.Data.OleDb;
    
    namespace TeaCon01
    {
    	public class GestiBaDa : ConnDB
    	{
    
             	private string dbrecordset;
    		private string tsqlstringa;
    
    		public GestiBaDa()
    		{
    			// non usato
    			
    		}
    
    		public string DBRecordset
    		{
    			get
    			{
    				return dbrecordset;
    			}
    			set
    			{
    				dbrecordset = value;
    			}
    		}
    
    		public string TSQLStringa
    		{
    			set
    			{
    				tsqlstringa = value;
    			}
    		}
    
    
    		public void InserisciDati(string [,] arrayElem, string nomeTabellaDB)
    		{
    			
    			DataSet DSVisual = new DataSet();
    			DataTable DBTable = new DataTable();
    			this.tableNameDB = nomeTabellaDB;
    			DSVisual = Connessione();
    			DBTable = DSVisual.Tables[nomeTabellaDB];
    			DataRow DBRows;
    			DBRows = DBTable.NewRow();
    
         		try
    			{
    				DBRows["NomeIscritto"] = arrayElem[0,1];
    				DBRows["CognomeIscritto"] = arrayElem[1,1];
    				DBRows["IndirizzoIscritto"] = arrayElem[2,1];
    				DBRows["NCivicoIscritto"] = arrayElem[3,1];
    				DBRows["CAPIscritto"] = arrayElem[4,1];
    	    		        DBRows["CittaIscritto"] = arrayElem[5,1];
    				DBRows["ProvIscritto"] = arrayElem[6,1];
    
    			}
    			catch
    			{
    				throw;
    			}
      			DBTable.Rows.Add(DBRows);
                            
                          /////// QUI DOVREI RICHIMARE IL MIO DBAdapter CHE SI TROVA IN CONNDB()
    
    		}
    
    
    // Seconda classe
    
    	public class ConnDB
    	{
            private string tablenamedb;
    		public string tableNameDB
    		{
    			get
    			{
    				return tablenamedb;
    			}
    			set
    			{
    				tablenamedb = value;
    			}
    		}
    		public ConnDB()
    		{
    
    		}
    
    		public DataSet Connessione() 
    		{
    			try
    			{
    				string DBConnString;
    				string sqlStringaDB = "SELECT * FROM ";
    				DBConnString = @"Provider=Microsoft.jet.oledb.4.0;data source=C:\Documents and Settings\myDir\Documenti\Visual Studio Projects\WindowsApplication4\TeCoDaBa\TeaConDB.mdb;Mode=ReadWrite|Share Deny None;Jet OLEDB:Engine Type=5";		
    				OleDbConnection DBConnect = new OleDbConnection(DBConnString);
    				DBConnect.Open();
    				sqlStringaDB = sqlStringaDB + tablenamedb;
    			    OleDbDataAdapter DBAdapter = new OleDbDataAdapter(sqlStringaDB, DBConnect);
    				DataSet DBSet = new DataSet(tablenamedb);
    				DBAdapter.FillSchema (DBSet, SchemaType.Source, tablenamedb);
    				DBAdapter.Fill (DBSet, tablenamedb);
    				return DBSet;
    			}
    			catch(Exception ex)
    			{
    				throw;
    			}
    		}
    		
    		public void Disconnessione()
    		{
    		 //DBConnect.Close();
    		}
    
    	}
    }
    queste sono le due classi...
    grazie dell'aiuto

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    per passare un valore da una classe all'altra ma più propriamente per usare una classe da un'altra classe (quindi A usa B o passa variabili a B), devi avere un oggetto B all'interno di A e usare i suoi metodi pubblici o proprietà pubbliche o variabili pubbliche..

    C# e Java sono diversissimi su questo..

    ps: queste cose sono base dell'oop.. stai seguendo un libro o un corso sul c#.. se sei autodidatta seza basi oop farai un gran casino

  3. #3
    o seguito il corso che c'è sul sito HTML.it.... ma sto studiando anche il manuale Microsoft sul C#... e ho letto diversi articoli...

    so che da una classe, se voglio prendere proprieta e metodi da un'altra classe, la devo derivare...

    public class A : B


    Public class B

    pero non mi riesce...
    forse ho complicato troppo le cose?

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    l'ereditarietà serve per dire che una classe è "un'estensione" di quella base..

    potremo dire una specializzazione..

    tu dici che vuoi usare il table adapter.. ma come puoi se è interno ad una funzione?

    forse è meglio che spieghi meglio cosa vuoi fare

  5. #5
    quello che voglio fare è questo.

    Creare una classe che mi permetta di gestire connessione ad una base dati e relative operazioni di modifica/gestione.
    Nel codice che ho postato, ho cercatodi fare questo.

    la classe ConnDB serve a creare la connessione
    siccome sono molto nuovo della programmazione OOP, ho pensato che fosse logico nella mia classe racchiudere un metodo che mi permettesse di eseguire la connessione e un primo caricamenteo dei dati ...
    ho pensato anche che fosse utile far giungere al mio metodo, dei parametri dall'esterno e ho quindi inserito GET e SET per permettere il passaggio dei parametri dall'esterno, parametri che devono obbligatoriamente variare ogni volta che decido di cambiare DataBase o tabella.
    Il metodo Connessione() funziona, crea la connessione e carica i dati, ricevendo dall'esterno il nome del database e della tabella. Viene restituito un DAtaSet opportunamente caricato di dati.

    La classe GestiBaDa invece si occupa delle operazioni sul DB aperto dall'altra classe.
    Riceve il suo bel vettore di valori (qui è a due dimensioni ma devo farlo a una sola), carica il dataset aperto e aggiunge la riga.
    Ora dovrei richiamare il DataAdapter con il quale ho eseguito le operazioni precedenti (secondo la logica dell' MSDN che ho spulciato e se posso ti aggiungo anche l'idirizzo della pagina), cioè quello che ho usato precedentemente per caricare i dati dal DB.
    Pero non riesco a ricavarlo....
    La cosa più logica chemi è venuta in mente è stato sfruttare l'ereditarieta fra classi....ma non ha avuto esito.

    Forse ho incasinato troppo le cose...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da Stoicenko
    C# e Java sono diversissimi su questo..
    In che senso?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da EmanueleTo
    Ora dovrei richiamare il DataAdapter con il quale ho eseguito le operazioni precedenti (secondo la logica dell' MSDN che ho spulciato e se posso ti aggiungo anche l'idirizzo della pagina), cioè quello che ho usato precedentemente per caricare i dati dal DB.
    Pero non riesco a ricavarlo.... [...]
    A giudicare dal codice, l'oggetto DataAdapter a cui fai riferimento è una variabile locale inserita all'interno di un metodo, pertanto è normale che non sia visibile all'esterno di quel metodo.

    Devi utilizzare un campo pubblico o una proprietà pubblica nella classe base: qualsiasi classe discendente avrà anch'essa quella proprietà, poiché ereditata.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  8. #8
    Grazie Alka, ieri sera a tardi sono arrivato proprio ad accorgermi del mio stupido errore... mi scuso con voi per aver postato una cosa cosi banale....

    in effetti CREDO di aver risolto proprio facendo come dice Alka, ma forse in modo meno "publico"

    o dichiarto nella mia classe base


    codice:
    ....................
    private OleDbDataAdapter mydbadapter;
    
    public OleDbDataAdapter MyDBAdapter 
    {
    get { return mydbadapter; }
    }
    .................
    richiutilizzandolo poi nell'altra classe....

    codice:
    ...........................
    base.Adattatore.Update();
    ...................
    il risultato sembra essere corretto...oggi provo e se vi interessa posto l'esito...

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,472
    Originariamente inviato da EmanueleTo
    in effetti CREDO di aver risolto proprio facendo come dice Alka, ma forse in modo meno "publico"
    codice:
    ....................
    private OleDbDataAdapter mydbadapter;
    
    public OleDbDataAdapter MyDBAdapter 
    {
    get { return mydbadapter; }
    }
    .................
    Credo che sia il modo migliore. Per comodità, magari utilizza un nome per il campo che non differisca per il solo "case" (maiuscolo/minuscolo), ad esempio chiamandolo _MyDbAdapter o m_MyDbAdapter o mMyDbAdapter.


    o dichiarto nella mia classe base



    Originariamente inviato da EmanueleTo
    richiutilizzandolo poi nell'altra classe....
    codice:
    ...........................
    base.Adattatore.Update();
    ...................
    il risultato sembra essere corretto...
    Puoi anche scrivere più semplicemente
    codice:
    ......
    MyDbAdapter.Update();
    ......
    senza utilizzare base, in quanto si tratta sempre della stessa proprietà.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    grazie Alka

    provo a completare le modifiche....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.