0

テーブルを編集するための DataGridView があります。次のコードは、テーブルを更新するために使用しています。

using (SqlConnection con = new SqlConnection("...."))
{
    con.Open();

    SqlDataAdapter da = new SqlDataAdapter("select * from T", con);
    SqlCommandBuilder cb = new SqlCommandBuilder(da);
    cb.ConflictOption = ConflictOption.OverwriteChanges;

    da.UpdateCommand = cb.GetUpdateCommand();
    // da.UpdateCommand.CommandText = "exec sp1 @p1, @p2, @p3...";
    da.InsertCommand = cb.GetInsertCommand();
    da.DeleteCommand = cb.GetDeleteCommand();
    da.Update(datatable.GetChanges());
}

da.Update(datatable.GetChanges())変更された列に従って、最小限の set 句をスマートに生成することがわかりました。

update T set c1 = @p1 where K = @p2 -- If only c1 is changed in the grid 
update T set c1 = @p1, c2 = @p2 where K = @p3 -- if both c1 and c2 is changed
update T set c4 = @p1 where K = @p2 -- if only c4 is changed
......

CommandTextのストアドプロシージャの書き方

4

2 に答える 2

4

パラメータを受け取るサーバー上にストアド プロシージャを作成する必要があります。使用している方法は SQL を生成するためのものであり、ストアド プロシージャは使用しません。サーバーへの接続を介して SQL を送信します。sproc に UpdateSomeUserTable という名前を付けた場合:

oleDbCommand1.CommandText = "UpdateSomeUserTable";
oleDbCommand1.CommandType = System.Data.CommandType.StoredProcedure;

oleDbCommand1.Parameters["us_id"].Value = "668987";
oleDbCommand1.Parameters["us_lname"].Value = "White";
oleDbCommand1.Parameters["us_fname"].Value = "Johnson";

oleDbConnection1.Open();
oleDbCommand1.ExecuteNonQuery();
oleDbConnection1.Close();
于 2012-05-24T20:00:40.483 に答える