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();
}

第一个函数获取所有表数据并将其转储到网格视图。第二个函数接受输入并将其插入数据库。如何压缩或简化这些功能?

4

2 回答 2

5

如何压缩或简化这些功能?

在简化之前,我会专注于正确性。目前我可以看到代码至少有两个问题:

  • 绝对应该使用参数化 SQL,而不是将值放入 SQL 本身。您当前的代码容易受到 SQL 注入攻击。
  • using即使抛出异常,您应该使用语句以便自动关闭连接和命令。

然后在简化方面:

  • 您可以使用SqlCommand接受文本和连接的构造函数 - 类型默认为Text反正。
  • 我个人会尝试将 UI 代码与存储代码分开,至少对于一个不平凡的项目而言。您应该查看 ASP.NET MVC,至少要了解一些分离的概念,即使您没有更改以开始使用它。
于 2013-06-05T06:29:21.710 回答
3

Button2_Click(object sender, EventArgs e)方法中,您需要使用参数化查询来避免SQL 注入。那是标准的方式。

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();
}

希望它有帮助。

于 2013-06-05T06:31:05.823 回答