Qual è un modo appropriato per gestire una connessione MySQL tramite C #

1

La mia domanda, in definitiva, è qual è il modo migliore (migliore) per gestire la nostra connessione verso MySQL db con C #.

Bene, attualmente sto lavorando su un C # (tipo WinForms) < - > Applicazione MySQL e ho cercato Connections Server in Amministratore MySQL , sono stato testimone dell'esecuzione delle mie query MySQL, la connessione si apre e si chiude, ecc. Nel mio codice C # sto lavorando in questo modo e questo è un esempio:

public void InsertInto(string qs_insert)
{

     try
     {
          conn = new MySqlConnection(cs);
          conn.Open();

          cmd = new MySqlCommand();
          cmd.Connection = conn;
          cmd.CommandText = qs_insert;
          cmd.ExecuteNonQuery();

     }
     catch (MySqlException ex)
     {
         MessageBox.Show(ex.ToString());
     }
     finally
     {
         if (conn != null)
         {
            conn.Close();
         }
     }
}

Significato, ogni volta che voglio inserire qualcosa nella tabella db, chiamo questa tabella e passo la stringa di query insert a questo metodo. Connessione stabilita, aperta, query eseguita, connessione chiusa. Quindi, potremmo concludere che questo è il modo in cui gestisco la connessione MySQL.

Per me e il mio punto di vista, al momento, questo funziona ed è abbastanza per le mie esigenze.

Bene, hai Java e amp; Ibernazione, C # e amp; Entity Framework e sto facendo questo: - / e mi sta confondendo. Dovrei usare MySQL con Entity Framework?

Qual è il modo migliore per la collaborazione tra C # e MySQL? Non voglio preoccuparmi della connessione che ho aperto, la stessa connessione potrebbe essere più veloce, ...

    
posta Sylca 16.11.2012 - 14:50
fonte

2 risposte

11

Suggerirei using

using(MySqlConnection conn = new MySqlConnetion(cs)
{
    conn.open();
    //setup and execute query

} //conn gets closed here

Qui, una volta uscito dal blocco using , la connessione viene chiusa.

    
risposta data 16.11.2012 - 14:59
fonte
2

La regola è: aprire il più tardi possibile. Chiudi il prima possibile. (in realtà stai ricevendo e inserendo nel pool di connessioni, ma i nomi dei metodi sono aperti / chiusi).

Il tuo snippet di codice è OK, ma se vuoi seguire la regola alla lettera, allora Open () potrebbe essere spostato subito prima di ExecuteNonQuery ().

Come suggerito da DFord, i blocchi utilizzati sono preferiti in C #. Questo è per ragioni stilistiche. Questo è uno stile basato sull'ambito. Puoi trattare le tue risorse (connessioni) in qualche modo come se fossero normali primitive locali come int, double, ecc. Quando sono fuori portata, tutto viene automaticamente ripulito. Il blocco "using" viene convertito in un try / finally dal compilatore.

Il blocco using è una simulazione di RAII. Comunque è una simulazione, non la cosa reale. L'uso dei blocchi è uno zucchero sintattico per scrivere try / catch. Nel vero RAII non devi scrivere alcuna sintassi speciale per ottenere l'effetto pop stack poiché è controllato dallo stack letterale. Real RAII è leggermente più sicuro in quanto non è necessario ricordare di scrivere costrutti speciali come "using" o "try".

    
risposta data 16.11.2012 - 18:10
fonte

Leggi altre domande sui tag