2016-07-07 3 views
0
public void buttonclick(object sender,eventArgs e) 
{ 
    SqlConnection con0 = new SqlConnection(ConfigurationManager.ConnectionStrings["BUM"].ConnectionString); 
    con0.Open(); 

    SqlCommand cmd0 = new SqlCommand("", con0); 
    con0.Close(); 

    SqlConnection con1 = new SqlConnection(ConfigurationManager.ConnectionStrings["BUM"].ConnectionString); 
    con1.Open(); 

    SqlCommand cmd3 = new SqlCommand("book_master_insert", con1); 
    cmd3.CommandType = CommandType.StoredProcedure; 

    SqlParameter customer_id = new SqlParameter("@customer_id", cust_id); 
    SqlParameter booking_from = new SqlParameter("@booking_from", ddlfrom.SelectedItem.Text); 
    SqlParameter booking_destination = new SqlParameter("@booking_destination", ddlto.SelectedItem.Text); 
    SqlParameter load_type = new SqlParameter("@load_type", ddlLoadtype.SelectedItem.Text); 
    SqlParameter no_of_containers = new SqlParameter("@no_of_containers", txt_no_of_container.Text); 
    SqlParameter booking_pickupdate = new SqlParameter("@booking_pickupdate", txt_date.Text); 
    SqlParameter booking_pickuptime = new SqlParameter("@booking_pickuptime", txt_time.Text); 
    SqlParameter booking_createdate = new SqlParameter("@booking_createdate", localDate); 

    cmd3.Parameters.Add(customer_id); 
    cmd3.Parameters.Add(booking_createdate); 
    cmd3.Parameters.Add(booking_from); 
    cmd3.Parameters.Add(booking_destination); 
    cmd3.Parameters.Add(load_type); 
    cmd3.Parameters.Add(no_of_containers); 
    cmd3.Parameters.Add(booking_pickupdate); 
    cmd3.Parameters.Add(booking_pickuptime); 

    cmd3.ExecuteNonQuery(); 
    con1.Close(); 

    SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["BUM"].ConnectionString); 
    con2.Open(); 

    SqlCommand cmd2 = new SqlCommand("select booking_ID from booking_master where customer_id='"+cust_id+"' and booking_from='" + ddlfrom.SelectedItem.Text + "'and booking_destination='" + ddlto.SelectedItem.Text + "' and load_type='" + ddlLoadtype.SelectedValue + "' and no_of_containers='" + txt_no_of_container.Text + "' and CAST (booking_pickupdate as date) ='" + txt_date.Text + "' and booking_pickuptime='" + txt_time.Text + "';", con2); 

    SqlDataReader rdr = cmd2.ExecuteReader(); 

    while (rdr.Read()) 
    { 
     booking_ID = rdr["booking_ID"].ToString(); 
    } 

    con2.Close(); 
} 
+2

Wenn Sie auf demselben Server und derselben Datenbank verbinden, müssen Sie nicht die Verbindung nach der ersten Abfrage schließen müssen . Lass es offen. Ändern Sie den SqlCommand und senden Sie die Abfrage erneut. Wenn alle Abfragen abgeschlossen sind, können Sie die Verbindung schließen. –

+1

Sie tun nicht den 'SqlCommand cmd2 = neuen SqlCommand (" select booking_ID .... 'in der Produktion? Https://www.owasp.org/index.php/SQL_Injection SqlInjection ist sehr gefährlich – Michel

Antwort

0

Da CON0, CON1 und CON2 gleich sind, können Sie es so schreiben, und bitte cmd2 wie cmd3 machen, parametrisierte Abfrage verwenden:

using (var conn = new SqlConnection("...Connection String...")) 
{ 
    conn.Open(); 
    using (var cmd = new SqlCommand()) 
    { 
    cmd.Connection = conn; 

    // Query1 
    cmd.CommandText = "...Query1..."; 
    cmd.ExecuteNonQuery(); 

    // Query2 
    cmd.CommandText = "...Query2..."; 
    cmd.ExecuteReader(); 
    } 
} 
0

über Effizienz reden erste, was Sie versuchen zu machen?

  1. System.Data.SqlClient (ADO.Net) re-use connection pooling wenn es neue Verbindung detektiert, ist auch mit der ersten Verbindung hergestellt Basis auf sie Connection.

  2. Der Aufruf mehrerer SqlConnection ist nicht von Bedeutung, solange Sie sie schließen und nach der Verwendung entsorgen. Viel besser, wenn Sie es mit Anweisung umschließen, aber denken Sie daran, dass es davon abhängt, was Sie versuchen zu tun oder was Sie benötigen. Das Öffnen/Schließen der Verbindung ist viel billiger als die offene Verbindung für lange Zeit. Wenn du die Verbindung wiederverwenden kannst, mag es was @x ... beantwortet.

  3. Es hat nichts mit Effizienz zu tun, aber Sie sollten AVOID anhängen Benutzereingabewert in Ihrer SQL-Abfrage. Dies führte zu SQL-Injektion und -Exploration, wie es @mar_s sagte. Alternativ können Sie cmd.Parameters.AddWithValue("@Name", "Bob"); für Ihre Sicherheit verwenden.

Hinweis: Ich habe den Code nicht getestet:

public void buttonclick(object sender,eventArgs e) 
{ 
    var connectionString = ConfigurationManager.ConnectionStrings["BUM"].ConnectionString; 

    using(SqlConnection con0 = new SqlConnection(connectionString)) 
    { 
     con0.Open(); 
     using(SqlCommand cmd = new SqlCommand("book_master_insert", con0)) 
     { 
      cmd.CommandType = CommandType.StoredProcedure;    
      cmd.Parameters.AddWithValue("@customer_id", cust_id); 
      cmd.Parameters.AddWithValue("@booking_from", ddlfrom.SelectedItem.Text); 
      cmd.Parameters.AddWithValue("@booking_destination", ddlto.SelectedItem.Text); 
      cmd.Parameters.AddWithValue("@load_type", ddlLoadtype.SelectedItem.Text); 
      cmd.Parameters.AddWithValue("@no_of_containers", txt_no_of_container.Text); 
      cmd.Parameters.AddWithValue("@booking_pickupdate", txt_date.Text); 
      cmd.Parameters.AddWithValue("@booking_pickuptime", txt_time.Text); 
      cmd.Parameters.AddWithValue("@booking_createdate", localDate);    
      cmd.ExecuteNonQuery(); 

      // This is a BAD idea and you should replace this using parametrized queries 
      using(SqlCommand cmd2 = new SqlCommand("select booking_ID from booking_master where customer_id='"+cust_id+"' and booking_from='" + ddlfrom.SelectedItem.Text + "'and booking_destination='" + ddlto.SelectedItem.Text + "' and load_type='" + ddlLoadtype.SelectedValue + "' and no_of_containers='" + txt_no_of_container.Text + "' and CAST (booking_pickupdate as date) ='" + txt_date.Text + "' and booking_pickuptime='" + txt_time.Text + "';", con2)) 
      {  
       using(SqlDataReader rdr = cmd2.ExecuteReader()) 
       {  
        while (rdr.Read()) 
        { 
         booking_ID = rdr["booking_ID"].ToString(); 
        } 
       } 
      } 
     } 
    } 
} 
Verwandte Themen