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(). 事实证明它可能会发生,就我而言,它发生在我更新数据库中的几个不同表时。

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

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

这告诉我它可以在不调用它的情况下工作,但最好调用它。我试图找出为什么有时它会起作用,而有时却不起作用的原因。但我一直无法完全弄清楚。

于 2010-06-25T15:32:36.193 回答