0

我在后面的代码中遇到了以下代码,想知道这是否是一种以编程方式插入记录的好习惯:

protected void ButtonMain_Click(object sender, EventArgs e)
{

    string sConn = ConfigurationManager.ConnectionStrings["SQL1"].ConnectionString;
    SqlDataSource dbQ = new SqlDataSource();
    dbQ.ConnectionString = sConn;
    dbQ.InsertCommand = "INSERT INTO data1_DropDownLists (ParamID, ddlValue) VALUES ('" + ddlAllParams.SelectedValue + "','" +
        txtddl.Text + "')";
    dbQ.Insert();
    DropDownGrid.DataBind();
    dbQ = null;

}

我之前看到的是这样的:

     string query = "INSERT INTO data1_DropDownLists vALUES ...";
     cmd = new SqlCommand(query, conn);
     conn.Open();
     cmd.ExecuteNonQuery();

所以不确定使用 InsertCommand 使用上述方法有什么好处

4

2 回答 2

1

SqlDataSource是 System.Web 命名空间中的一个控件。它可以用作 Web 数据绑定控件(如RepeaterGridView.

它是一个控件,应该在 aspx 标记上以声明方式使用,而不是在代码隐藏中。它就像 GUI 和 DAL 之间的接口。通常你应该避免这种硬链接。相反,您应该将 GUI(ASPX)、BLL(代码隐藏或类库等)和 DAL(ADO.NET 或实体框架等)分开。

我建议使用最直接的方式,使用 ADO.NET SqlCommand

// use using-statement to ensure that the connection gets closed even in case of an error
using (var con = new SqlConnection(connectionString))
{
    using (var cmd = new SqlCommand("INSERT INTO dbo.Table(Column)VALUES(@Column)", con))
    {
        // use parameters to avoid SQL-Injection
        cmd.Parameters.AddWithValue("@Column", value);
        con.Open();
        cmd.ExecuteNonQuery();
    }
}
于 2012-11-07T15:06:54.123 回答
0

SqlDataSource 类有四个命令属性,每个 sql 操作一个:SelectCommand, InsertCommand, UpdateCommand, DeleteCommand.

创建实例后,可以设置每个命令属性。

该类还公开了一个双参数构造函数SqlDataSource(String, String),其中第二个参数指定 SELECT 命令文本。

于 2012-11-07T15:09:53.460 回答