Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17

    Leggere il numero di righe di una tabella con Connessione OleDbConnection

    Leggere il numero di righe di una tabella con Connessione OleDbConnection


    Salve a tutti

    Sono nuovo e sto riprendendo il C# dopo tanto tempo

    Sto cercando come poter leggere il numero di Record di una tabella dopo aver fatto una

    --Select count(*) from Nome Tabella;--
    /*
    | string mySelectQuery = "select count(*) from TabAnno;";
    | OleDbConnection myConnection = new OleDbConnection(StrConnect);
    | OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
    |
    | myConnection.Open();
    |
    | OleDbDataReader myReader;
    | myReader = myCommand.ExecuteReader();
    */
    Quello che mi manca è il Seguito, ovvero far in modo che mi venga messo il contenuto della select in un intero.
    /*
    | Int count = myRead.. .. ..
    */

    Grazie anticipatamente a tutti

    Leo

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Puoi scrivere

    codice:
    int count = myReader.GetInt32(0);
    ma è meglio se, al posto del DataReader, invochi il metodo ExecuteScalar dell'oggetto Command, che restituisce il primo dei valori del primo record ottenuto, che sostanzialmente è l'informazione che ti interessa in questo contesto.

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

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

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17
    Grazie per la risposta....

    Ma non capisco senza modificare niente mi dice che non esiste nessun valore...

    Come faccio a modificare DataReader, invocando il metodo ExecuteScalar??

    io non so coem si fa...

    mi puoi aiutare con il codice?...Purtroppo riprendo il Codice dopo solo un corso...
    e voglio imparare bene...

    Grazie ancora per la risposta...


  4. #4
    Per usare il metodo ExecuteScalar (che restituisce il valore del primo campo della query, nel tuo caso la funzione COUNT()) puoi fare così:

    codice:
    .......
    string mySelectQuery = "SELECT COUNT(*) FROM TabAnno";
    OleDbConnection myConnection = new OleDbConnection(StrConnect);
    OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
    
    myConnection.Open();
    
    int _NumRec = int.Parse(myCommand.ExecuteScalar().ToString());
    
    .......
    ExecuteScalar() ti ritorna un ogetto object.

    Ciao.
    Il linguaggio migliore e quello che ti crei da solo...

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da Condor80
    Come faccio a modificare DataReader, invocando il metodo ExecuteScalar??
    Rileggendo attentamente la risposta che ti ho dato.

    Io ho scritto "invochi il metodo ExecuteScalar dell'oggetto Command".

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

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

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17
    Grazie infinitamente Akira86 e anche alka

    Infatti mi stavo per imbattere con il problema di convertire l'object in int...


    Grazie infinitamente....


  7. #7
    Eh, effettivamente in C# ho visto che i risultati delle count() cono abbastanza delicati.

    Se volessi utilizzare il Get giusto di un Datareader (nel caso non usi ExecuteScalar ma ExecuteQuery) ho riscontrato che il risultato di un count varia in lunghezza di interi da dbms a dbms....

    Ad esempio Access restituisce un int32, MySql un int64, come gli rode insomma.

    L'unica alternativa che avevo trovato era fare una forzatura, ovvero:

    Int64 num = Int64.Parse(dr.GetValue(n).ToString());

    Così sembra rozzo ma è un sistema che funziona con qualsiasi dbms....

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    17
    Grazie a tutti...

    Questo Problema adesso è risolto.

    Adesso avrei un'altro Quesito...

    Volevo importare una tabella per poter riempire una tendina, questo è il mio obbiettivo Finale.

    per estrarre i dati, sto usando quanto segue

    codice:
     
                string mySelectQuery = "SELECT * FROM " + NomeTabella + ";";
                OleDbConnection myConnection = new OleDbConnection(StrConnect);
                OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
    
                object[] _objColonna;
    
                myConnection.Open();
    
                OleDbDataReader myReader;
                myReader = myCommand.ExecuteReader();
    
                _objColonna = .....
                
                myConnection.Close();
                return myReader;
    la tabella contiene nella prima colonna L'ID_Anno e nella seconda colonna L'anno.

    Ma non riesco a trasformare myReader in Object....

    Avete una risposta? o meglio un sugerimento come posso fare?


    :master: :master:

    Grazie

  9. #9
    Provo a risponderti, speriamo bene...

    Dunque, da quello che vedo tu hai creato un array di object (objcet[]), il MyReader non è un array di oggetti, ma un oggetto.

    Quindi, almeno secondo me ma tocca prima provarci, non funziona

    _objColonna = myReader;

    ma al limite

    _objColonna[i] = myReader;

    Per poterti spiegare meglio dimmi cosa vorresti fare di preciso, ad esempio, se, come dici, vuoi utilizzare un menù a tendina (combobox) ti conviene utilizzare direttamente tale oggetto.

    Ora non so bene come utilizzare la combobox in C#, non ho avuto ancora modo di utilizzarla unita ad un db, ma in VB6 la combobox aveva, associato ad un elemento della lista, una casella itemdata (che era un array) dove potevi salvare un indice numerico associato all'elemento visualizzato.

    Ad esempio, aggiungevi un elemento nella combobox e subito l'indice all'interno del db dell'elemnto nella itemdata corrispondente a quell'elemento inserito, per recuperare l'indice, una volta scelto un elemento ti andavi a pescare l'indice di lista dell'elemento selezionato e recuperavi l'itemdata corrispondente.

    Prova a vedere se c'è qualcosa del genere in C#.

  10. #10
    Potresti anche utilizzare le proprieta' della combobox Datasource, DisplayyMember e ValueMember in questo modo:

    codice:
    ComboBox cbbAnno = new ComboBox();
    
    string queryAnno = "select IDAnno, Anno from myTable";
    dataSet = new DataSet("DataSet");
    SqlCommand sqlCommand = new SqlCommand(queryAnno , sqlConnection);
    SqlDataAdapter dataAdapter= new SqlDataAdapter(sqlCommand);
    dataAdapter.Fill(dataSet, "MyTable");
    
    cbbAnno .DataSource = dataSet;
    cbbAnno .DisplayMember = "myTable.Anno";
    cbbAnno .ValueMember = "myTable.IDAnno";
    PS
    Manca l'apertura della SqlConnection, ma su quella non hai certamente problemi
    Lo stile della combobox deve essere dropdownlist


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.