在使用SqlDataAdpater.Update()之前是否需要调用SqlCommandBuilder.GetUpdateCommand()?

Sco*_*ain 5 c# sqlcommandbuilder

当我使用一个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);
}
Run Code Online (Sandbox Code Playgroud)

我看到有关正确程序的相互矛盾的 例子.我知道没有它可行,但我不知道它是否在幕后做了一些特别的事情.这是必要的还是货物编程?

jsm*_*ith 5

我在我的测试数据库上做了一些测试,看看我是否能想出一个如果我没有调用就会出现错误的情况GetInsertCommand().事实证明它可能发生,在我的情况下,它发生在我更新数据库中的几个不同的表时.

出于某种原因,在更新我的第4个表时,它无法正确插入.这让我很困扰,所以我决定再做一些研究,这些研究把我带到了这里.密切关注:

首次生成Transact-SQL语句后,如果应用程序以任何方式更改语句,则必须显式调用RefreshSchema.否则,GetInsertCommand仍将使用前一个语句中的信息,这可能不正确.

这告诉我它可以在不调用的情况下工作,但最好还是调用它.我试图找到为什么有时它确实有效的推理,有时却没有.但我完全没能弄明白.