InsertCommand里面的代码

时间:2012-11-07 14:57:24

标签: asp.net ado.net

我在后面的代码中遇到了跟随代码并且想知道 如果这在插入记录方面可能是一个好习惯 编程:

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

使用上述方法可能带来的好处

2 个答案:

答案 0 :(得分:1)

SqlDataSource是System.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();
    }
}

答案 1 :(得分:0)

The SqlDataSource class有四个命令属性,每个sql操作一个:SelectCommandInsertCommandUpdateCommandDeleteCommand

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

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

相关问题