当我使用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正确的程序。我知道没有它可行,但我不知道它是否在幕后做了一些特别的事情。这是必要的还是货物崇拜节目?
答案 0 :(得分:5)
我在我的测试数据库上做了一些测试,看看我是否能够提出一个如果我没有调用GetInsertCommand()
就会出现错误的情况。事实证明它可能发生,在我的情况下,它发生在我更新数据库中的几个不同的表时。
由于某些原因,在更新我的第4个表时,无法正确插入。这给我带来了麻烦,所以我决定再做一些研究,这让我here。密切关注:
首次生成Transact-SQL语句后,如果应用程序以任何方式更改语句,则必须显式调用RefreshSchema。否则,GetInsertCommand仍将使用前一个语句中的信息,这可能不正确。
这告诉我它可以在不调用它的情况下工作,但最好还是调用它。我试图找到为什么有时它确实有效的推理,有时却没有。但我完全没能弄明白。