2013-06-05 101 views
2
protected void populateDataGrid() 
{ 
    string connectionString = configurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 
    string command = "select * from student"; 

    SqlDataAdapter dataAdapter = new SqlDataAdapter(command, connectionString); 
    DataSet data = new DataSet(); 

    dataAdapter.Fill(data); 
    GridView1.DataSource = data; 
    GridView1.DataBind(); 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["sqlstudentConnectionString"].ConnectionString; 
    string command = @"INSERT INTO [student] (studentID, studentFirstName, studentLastName) 
         VALUES (" + TextID.Text + ", '" + TextFirstName.Text + "', '" + TextLastName.Text + "')"; 
    SqlConnection sqlConnection = new SqlConnection(connectionString); 

    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandType = System.Data.CommandType.Text; 
    cmd.CommandText = command; 
    cmd.Connection = sqlConnection; 

    sqlConnection.Open(); 
    cmd.ExecuteNonQuery(); 
    sqlConnection.Close(); 

    TextID.Text = ""; 
    TextFirstName.Text = ""; 
    TextLastName.Text = ""; 
    populateDataGrid(); 
} 

第一個函數獲取所有表數據並將其轉儲到gridview。 第二個函數接受輸入並將其插入到數據庫中。 這些功能如何被壓縮或簡化?什麼是使用sql連接的最佳/標準方法?

+0

你好,創建一個類調用student,並有私有連接字符串,並添加你插入方法並獲取方法。避免插入woth字符串concat,使用@ –

+3

參數更好的是創建帶有所有db函數的dbhelper類並從學生類中調用它。 –

回答

5

這些功能如何被壓縮或簡化?

我會在簡化之前關注正確性。目前我至少可以看到兩個問題的代碼:

  • 你應該絕對使用參數化的SQL,而不是把值到SQL本身。您當前的代碼很容易出現SQL注入攻擊。
  • 您應該使用using語句,以便連接和命令都會自動關閉,即使拋出異常。

然後在簡化方面:

  • 可以使用SqlCommand構造它接受文本和連接 - 類型默認爲Text反正。
  • 我個人會嘗試從存儲代碼中分離出UI代碼,至少對於一個不平凡的項目來說。你應該看看ASP.NET MVC,至少可以得到一些分離的想法,即使你沒有改變開始使用它。
3

Button2_Click(object sender, EventArgs e)方法中,您需要使用參數化查詢來避免SQL Injection。 這是標準的方法。

protected void Button2_Click(object sender, EventArgs e) 
{ 
    string connectionString = ConfigurationManager.ConnectionStrings["sqlstudentConnectionString"].ConnectionString; 
    string command = @"INSERT INTO [student] (
     studentID, studentFirstName, studentLastName 
    ) VALUES (
     @studID, @FName, @LName 
    )"; 

    using (SqlConnection sqlConnection = new SqlConnection(connectionString)) 
    using (SqlCommand cmd = new SqlCommand()) 
    { 
     cmd.CommandType = System.Data.CommandType.Text; 
     cmd.CommandText = command; 
     cmd.Parameters.AddWithValue("@studID", TextID.Text); 
     cmd.Parameters.AddWithValue("@FName", TextFirstName.Text); 
     cmd.Parameters.AddWithValue("@LName", TextLastName.Text); 
     cmd.Connection = sqlConnection; 

     sqlConnection.Open(); 
     cmd.ExecuteNonQuery(); 
     sqlConnection.Close(); 
    } 

    TextID.Text = ""; 
    TextFirstName.Text = ""; 
    TextLastName.Text = ""; 
    populateDataGrid(); 
} 

希望它的幫助。

相關問題