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

时间:2010-06-25 15:26:45

标签: 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);
}

我已经看到了conflicting examples正确的程序。我知道没有它可行,但我不知道它是否在幕后做了一些特别的事情。这是必要的还是货物崇拜节目?

1 个答案:

答案 0 :(得分:5)

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

由于某些原因,在更新我的第4个表时,无法正确插入。这给我带来了麻烦,所以我决定再做一些研究,这让我here。密切关注:

  

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

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