Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Connessione db

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    54

    Connessione db

    Ciao a tutti,

    mi sto addentrando nei meandri di asp.net (linguaggio c#)

    Volevo proporvi questo codice per capire il discorso "chiusura connessione".

    In asp ero abituato a ragionare in questa maniera:

    1. apro la connessione al db
    2. effettuo select (apro il rs, chiudo e setto a nothing il rs), update, delete in un punto
    3. effettuo select (apro il rs, chiudo e setto a nothing il rs), update, delete in un altro punto
    4 .vedi 2 e 3
    5. chiudo la connessione

    In asp.net ora sto simulando un caso molto semplice:

    Da un form ricevo un dato, verifico che il dato coincida con quello presente nel db, ed effettuo un update.

    Codice PHP:

    using 
    (SqlConnection conn = new SqlConnection(constr))
                {

                    
    //estraggo il dato che mi ineterssa
                    
    DataSet ds2 = new DataSet();
                    
    string datoattuale "";
                    
    string str_select "SELECT dato FROM tabella WHERE dato = '" variabile "'";
                    
    SqlDataAdapter da2 = new SqlDataAdapter(str_selectconn);
                    
    da2.Fill(ds2"dati");
                    for (
    int i 0ds2.Tables[0].Rows.Counti++)
                    {
                        
    dato ds2.Tables[0].Rows[i]["dato"].ToString();
                    }
                    
    //fine estraggo il dato che mi interessa

                   
                        
    string nuovodato "";
                        
    nuovodato Nuovodato.Text.Replace("'""''").Replace("%""%").Replace("<""").Replace(">""").ToString();
                        
    nuovodato nuovapassword.Trim();
                        
    string str_update "UPDATE tabella SET dato = '" nuovodato "'";
                        
    SqlCommand cmd = new SqlCommand(str_updateconn);

                        
    conn.Open();
                        
    cmd.ExecuteNonQuery();
                        
    conn.Close();
                        
                    }
                } 
    Se prima di cmd.ExecuteNonQuery() togliessi l'apertura della connessione il sistema mi risponde che non puo' effettuare l'operazione in quanto l'oggetto conn e' chiuso.
    Questo accade perche' ho utilizzato using (sqlconnection etc. (da quanto ho letto l'using chiude gli oggetti se lasciati aperti una volta effettuata l'operazione in cui si e' utilizzato quell'oggetto)?

    Fosse cosi', in termini di prestazioni è meglio lasciare comunque using oppure aprire una sola volta la connessione per poi chiuderla alla fine? (in questo caso credo che la connessione si apra e chiuda due volte, correggetemi se sbaglio).

    Grazie a tutti!

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    il problema e' che tu parti con una connessione chiusa.
    questo vuol dire che il dataAdapter, premurosamente, apre la connessione, fa la query e te la chiude.
    prova a spostare il conn.Open in testa al blocco using!
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    54
    Come faccio a passarlo sopra se conn e' dentro using?

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    using (SqlConnection conn = new SqlConnection(constr))
    {

    conn.Open();

    //estraggo il dato che mi ineterssa
    DataSet ds2 = new DataSet();
    string datoattuale = "";

    ....

    da2.Fill(ds2, "dati"); // la connessione e' gia aperta -> viene lasciata aperta

    ...... tutto come prima

    }
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    54
    Ah ok, perfetto!

    Come logica di select, update, in termini di prestazioni il codice ti sembra corretto?

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2006
    Messaggi
    559
    mmm direi che puoi fare meglio, cioe puoi usare i SQLPARAMETERS: ovvero, invece di creare la query con il valore ad hoc, metti un segnaposto. questo ti da vantaggi sia di sicurezza, sia di performance. ecco come dovresti riscrivere la query per la select

    SqlCommand cmdSelect = conn.CreateCommand();
    cmdSelect .CommandText= "SELECT dato FROM tabella WHERE dato = @filtroDato";
    cmdSelect .Parameters.AddWithValue("@filtroDato",variabile);
    SqlDataAdapter da2 = new SqlDataAdapter(cmdSelect);

    come puoi vedere @filtroDato fa da segnaposto, dopo di che gli associ il valore; ma al di fuori della stringa di select. nota anche come l'adapter abbia un costruttore per accettare anche un sqlcommand (necessario se vuoi usare i parametri)

    per l'update:
    string str_update = "UPDATE tabella SET dato =@nuovoDato";
    SqlCommand cmd = new SqlCommand(str_update, conn);
    cmd .Parameters.AddWithValue("@nuovoDato",nuovodato);
    se nella vita avro avuto la possiblita di aiutare qualcuno non avro vissuto invano (E. Dikinson)

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    54
    Grande!

    Grazie mille, seguiro' i tuoi consigli.

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.