2013-06-05 65 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(); 
} 

希望它的帮助。

相关问题