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名前空間のコントロールです。RepeaterまたはのようなWebデータバインドコントロールのデータソースとして使用できます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();
    }
}
于 2012-11-07T15:06:54.123 に答える
0

SqlDataSourceクラスSelectCommandには、SQLアクションごとに1つずつ、合計4つのコマンドプロパティがInsertCommandありUpdateCommandますDeleteCommand

インスタンスが作成されると、各コマンドプロパティを設定できます。

SqlDataSource(String, String)このクラスは、2番目の引数がSELECTコマンドテキストを指定する2つの引数コンストラクターも公開します。

于 2012-11-07T15:09:53.460 に答える