in
La comunità italiana dedicata a Sviluppatori e Architetti IT delle piattaforme Windows

eseguire query verso db...

Ultimo messaggio ricevuto il 12-02-2008 14.40 da soprandi. 2 risposta(e).
Pagina 1 di 1 (3 elemento/i)
Ordina messaggi: Precedente Successivo
  • 11-02-2008 11.54

    • soprandi
    • Utente Top 150
    • Registrato il 31-01-2008
    • Messaggi 7

    eseguire query verso db...

    Ho questa funzione a cui passo il nome di una tabella una stringa da cercare e una connessione. Mi aspetto che mi ritorni il codice numerico della persona identificata dalla stringa nel campo.

    Quando arrivo al SqlDataReader salta nel blocco catch e non prosegue... mi sapreste dire il motivo? e come posso individuare tra gli elementi trovati il campo corrispondente all'ID?

    la tab è di questo tipo:  | Id | nome | cognome | ...|  

    la connessione passata è dichiarata e le operazioni su essa sono queste prima di essere passata alla funzione:

    SqlConnection dbrconnection = new SqlConnection("....stringa..."); //funzionante

     dbrconnection.Open();

    int id_casa = function.ExistInDBR("editori", editori[edit], dbrconnection); 

     

    segue il codice della funzione... 

            public static int ExistInDBR(string tabella, string nome, SqlConnection conn)
            {
                SqlCommand cmd = null;
                try
                {
                    string sql = "SELECT * FROM " + tabella + " WHERE Nome = " + nome + ")";
                    cmd = new SqlCommand(sql, conn);
                    SqlDataReader reader = cmd.ExecuteReader();
                    if (reader.HasRows == true)
                    {
                        reader[0].GetType();
                        int ID = 0;
                        return ID;
                    }
                    else
                    {
                        return 0;
                    }
                }
                catch
                {
                    Console.WriteLine("Impossibile accedere al db");
                    return 0;
                }
            }

     

    grazie SIMONE 

    • Log
  • 11-02-2008 16.55 In risposta a

    Re: eseguire query verso db...

    A quanto pare qui c'è un errore:

    soprandi:
    string sql = "SELECT * FROM " + tabella + " WHERE Nome = " + nome + ")";
     

    Forse dovresti scrivere:

    string sql = "SELECT * FROM " + tabella + " WHERE Nome = '" + nome + "'";

    Fai attenzione al fatto che dopo WHERE Nome = c'è prima un apice singolo (') e poi uno doppio (") di chiusura della stringa C#. Poi, dopo nome + ce n'è uno singolo in mezzo a due doppi.

    In pratica, nella stringa finale ci sarà solo il nome che stai cercando racchiuso tra apici singoli.

    • Log
  • 12-02-2008 14.40 In risposta a

    • soprandi
    • Utente Top 150
    • Registrato il 31-01-2008
    • Messaggi 7

    Re: eseguire query verso db...

     ok graze mille risolto il tutto... ora ho un'altro problema.. ho 3 tabelle autori, editori e libri.. le prime due hanno ciascuna una relazione unoa molti verso la terza...

    Vorrei stampare a video tramite una listbox per ogni autore, tutti i libri fatti e accanto a ciascun libro la relativa casa editrice.

    ho quindi impostato il seguente codice 

    string sql_autori = "SELECT * FROM "+dbautore+"";      //Ottengo tutti gli autori

    cmd = new SqlCommand(sql_autori, conn);
    SqlDataReader result1 = cmd.ExecuteReader();
    while (result1.Read())                                                   //Ciclo su tui gli elementi di result1 e per ciascuo estraggo l'id e il nome

      {
        autore = (int)result1["ID"];
        nome_autore = (string)result1["nome"];
        conn.Close();
        conn.Open();
        listBox2.Items.Insert(rows, nome_autore);
        string libri = "SELECT titolo,id_casa FROM libro WHERE id_autore ='" + autore + "'";  //estraggo tuti i libri dell'autore trovato

       cmd1 = new SqlCommand(libri, conn);
        SqlDataReader result2 = cmd1.ExecuteReader();
        while (result2.Read())
           {
                titolo = (string)result2["titolo"];        //salvo titolo e id delal casa editrice d ciascun libro

               casa = (int)result2["id_casa"];
                conn.Close();
                conn.Open();
                string sql_casa = "SELECT nome FROM casaproduttrice WHERE id ='" + casa + "'"; //cerco il nome della casa editrice

               cmd2 = new SqlCommand(sql_casa, conn);
                SqlDataReader result3 = cmd2.ExecuteReader();      
                while (result3.Read())
                    {
                       nome_casa = (string)result3["nome"];
                    }                       
    }

    Il codice non sembra soffrre di gravi problemi se on fosse che mi visualizza solamente il primo autore con il suo primo libro e la casa editrice a fianco...ho trascrito le stesse query e passate a mssql ritornano un insieme di record dal db...

    Il mio dubbio è a questo punto sul funzionamento degli elementi SqlDataReader ...

    while (result3.Read())
                    {
                       nome_casa = (string)result3["nome"];
                    }    

    qeusto ciclo non dovrebbe ciclare su tutt gli elementi tonati dalla query in result3?

    altra domanda.... è necesssario ogni nuova query da eseguire interrompere la connessione con conn.stop() o no?

    gli sqlCommand cmd, cmd1 e cmd2 snon dichiarati all'inizio a null 

    grazie

     

    Simone 

    • Log
Pagina 1 di 1 (3 elemento/i)
Prelevato da http://www.devspy.com/forums/t/4684.aspx
DevSpy.com 6.0 © 2001-2008 - Alcuni Diritti Riservati
Salvo diversa indicazione, tutti i contenuti sono pubblicati sotto licenza "Creative Commons Attribution-Share Alike 3.0"