当我使用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);
}

我已经看到了正确的操作步骤。我知道没有它也行,但我不知道它在幕后是否做了什么特别的事情。这是必要的还是货物崇拜程序?

最佳答案

我对我的测试数据库做了一些测试,看看我是否能想出一个场景,如果我不调用GetInsertCommand(),就会发生错误。在我的例子中,当我更新一个数据库中的几个不同的表时,它就发生了。
由于某些原因,当更新我的第4个表时,它无法正确插入。这让我很困扰,所以我决定做更多的研究,这给我带来了here。密切注意:
首次生成transact-sql语句后,如果应用程序以任何方式更改了该语句,则必须显式调用refreshschema。否则,getinsertcommand仍将使用上一条语句中的信息,这可能不正确。
这告诉我不用叫它就可以工作,但最好叫它。我试着找出原因来解释为什么有时它能起作用,有时却不起作用,但我还没有完全弄清楚。

关于c# - 使用SqlDataAdpater.Update()之前是否需要调用SqlCommandBuilder.GetUpdateCommand()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3119253/

10-09 01:18