2016-05-19 2 views
1

Ich habe eine ASP.NET-Webanwendung, die mit SQL Server verbunden ist.Verwenden Sie viele SQL-Verbindung in einem Code?

Ich habe drei Verbindungen für jede SQL-Operation verwendet. Es funktioniert sehr gut, aber ich denke, das ist keine effiziente Art Dinge zu tun - kann das besser geschrieben werden als es ist?

public partial class Home : System.Web.UI.Page 
{ 
    SqlConnection co = new SqlConnection(ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString); 
    SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString); 
    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString); 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     using (co) 
     { 
      co.Open(); 
      SqlCommand cm = co.CreateCommand(); 
      cm.CommandText = "select..."; 
      cm.ExecuteNonQuery(); 
     } 
     co.Close(); 

     using (con) 
     { 
      con.Open(); 
      SqlCommand cmv = con.CreateCommand(); 
      cmv.CommandText = "insert..."; 

      cmv.ExecuteNonQuery(); 
     } 
     con.Close(); 

     using (con2) 
     { 
      con2.Open(); 
      SqlCommand cmf = con2.CreateCommand(); 
      cmf.CommandText = "delete from..."; 
      cmf.ExecuteNonQuery(); 
     } 
     con2.Close(); 
    } 
} 
+0

Sie können den Befehlstext ändern und innerhalb einer Verbindung beliebig oft erneut ausführen – Jaloopa

+0

Was möchten Sie erreichen? – Mairaj

+0

Kein schaden dabei aber auch nicht nötig. Verwenden Sie eine Verbindung. – shadow

Antwort

2
 SqlConnection co = new SqlConnection(ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString); 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      using (co) 
      { 
       co.Open(); 
       SqlCommand cm = co.CreateCommand(); 
       cm.CommandText = "select..."; 
       cm.CommandText += " insert..."; 
       cm.CommandText += " delete from..."; 
       cm.ExecuteNonQuery(); 
      } 
      co.Close();    
     } 

können Sie so verwenden.

2

Sie verwenden für jede Verbindung dieselbe Verbindungszeichenfolge? Warum brauchst du drei Verbindungen? Warum öffne und schließe nicht einfach gleich?

Solange die Verbindungszeichenfolge gleich ist, benötigen Sie nur eine Verbindung.

2

Im Allgemeinen sollen Sie ein Verbindungsobjekt so nahe erstellen bevorzugen und öffnen, wo Sie Gebrauch davon wie möglich zu machen, und so bald wie möglich danach entsorgen (vorzugsweise durch die Verwendung einer using Aussage). Verbindungspooling wird sicherstellen, dass Sie tatsächlich nur eine begrenzte Anzahl von echte-Verbindungen zum Server erstellen, trotz der großen Anzahl von SqlConnection Objekten, die Ihr Code zu erstellen scheint.

Innerhalb einer einzigen Methode ist es jedoch sinnvoll, ein einziges Verbindungsobjekt zu verwenden:

public partial class Home : System.Web.UI.Page 
{ 
    string connString = ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString; 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     using (SqlConnection co = new SqlConnection(connString)) 
     { 
      co.Open(); 
      using(SqlCommand cm = co.CreateCommand()) 
      { 
       cm.CommandText = "select..."; 
       cm.ExecuteNonQuery(); 
      } 

      using(SqlCommand cmv = co.CreateCommand()) 
      { 
       cmv.CommandText = "insert..."; 
       cmv.ExecuteNonQuery(); 
      } 

      using(SqlCommand cmf = co.CreateCommand()) 
      { 
       cmf.CommandText = "delete from..."; 
       cmf.ExecuteNonQuery(); 
      } 
     } 
    } 
} 

(Sie müssen nicht explizit das Verbindungsobjekt schließen, die Dispose (innerhalb der using sind Äquivalent)

2
  1. Keine Verwendung deklarieren/Erstellen mehrerer Verbindungen, wenn Sie nur einer nach dem anderen mit würde. Sie eins mit nur tun kann.
  2. Deklarieren Sie die Variable so nah wie möglich an der ersten Verwendung und mit minimalem Bereich, der verwaltet werden kann.
  3. Machen Sie Dinge modular und wiederverwendbar, so weit wie möglich.
  4. Keine Notwendigkeit, die Verbindung explizit zu schließen, da die IDisposable Schnittstellenimplementierung (und using Block) es sowieso tut. Aber es ist nicht schaden, es explizit zu schließen.

protected void Button1_Click(object sender, EventArgs e) 
{ 
    ExecuteNonQuery("select...", null);   // why?? 
    ExecuteNonQuery("insert...", null); 
    ExecuteNonQuery("delete from...", null); 
} 

protected void ExecuteNonQuery(string query, SqlParameter[] parameters) 
{ 
    using (SqlConnection co = new SqlConnection(ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString)) 
    { 
     co.Open(); 
     SqlCommand cm = co.CreateCommand(); 
     cm.CommandText = query; 
     if (parameters != null) cm.Parameters.AddRange(parameters); 
     cm.ExecuteNonQuery(); 
    } 
} 
0

Sie können dies auch versuchen.

 SqlConnection co = new SqlConnection(ConfigurationManager.ConnectionStrings["TextConnectionString"].ConnectionString); 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      StringBuilder sb = new StringBuilder(); 
      sb.AppendLine(" Select statement.. "); 
      sb.AppendLine(" Insert statement "); 
      sb.AppendLine(" delete statement "); 
      using (co) 
      { 
       co.Open(); 
       SqlCommand cm = co.CreateCommand(); 
       cm.CommandText = sb.Tostring(); 
       cm.ExecuteNonQuery(); 
      } 
      co.Close();    
     } 
Verwandte Themen