6

SqlCommandBuilderを使用して更新/挿入/削除をサーバーにプッシュする場合、、、、を呼び出す必要が.GetUpdateCommand()あり.GetInsertCommand()ます.GetDeleteCommand()か?

using (var adapter = new SqlDataAdapter("select * from MyTable", _connection))
using (var builder = new SqlCommandBuilder(adapter))
{
    adapter.Fill(dt);

    //Magic happens        

    builder.GetUpdateCommand(); //is this line necessary
    builder.GetInsertCommand(); //is this line necessary
    adapter.Update(dt);
}

正しい手順を実行するための矛盾する を見てきました。それがなくても機能することは知っていますが、舞台裏で何か特別なことをしたかどうかはわかりませんでした。これは必要ですか、それともカーゴカルトプログラミングですか?

4

1 に答える 1

5

テストデータベースでいくつかのテストを行い、を呼び出さないとエラーが発生するシナリオを考え出すことができるかどうかを確認しましたGetInsertCommand()。私の場合、データベース内のいくつかの異なるテーブルを更新しているときに発生する可能性があります。

何らかの理由で、4番目のテーブルを更新すると、正しく挿入できませんでした。これは私を悩ませたので、私はもう少し研究をすることに決めました、それは私をここに連れて来ました。以下に細心の注意を払ってください:

Transact-SQLステートメントが最初に生成された後、何らかの方法でステートメントが変更された場合、アプリケーションは明示的にRefreshSchemaを呼び出す必要があります。それ以外の場合、GetInsertCommandは前のステートメントの情報を引き続き使用しますが、これは正しくない可能性があります。

これは、それを呼び出さなくても機能することを私に教えてくれますが、それを呼び出す方が良いです。私は、それが機能する場合と機能しない場合がある理由を見つけようとしました。しかし、私はそれを完全に理解することができませんでした。

于 2010-06-25T15:32:36.193 に答える