我在后面的代码中遇到了跟随代码并且想知道 如果这在插入记录方面可能是一个好习惯 编程:
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
使用上述方法可能带来的好处答案 0 :(得分:1)
SqlDataSource
是System.Web命名空间中的控件。它可以用作网络数据绑定控件的数据源,例如Repeater
或GridView
。
这是一个控件,应该在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();
}
}
答案 1 :(得分:0)
The SqlDataSource class有四个命令属性,每个sql操作一个:SelectCommand
,InsertCommand
,UpdateCommand
,DeleteCommand
。
创建实例后,可以设置每个命令属性。
该类还公开了两个参数构造函数SqlDataSource(String, String)
,其中第二个参数指定SELECT命令文本。