2010-06-25 48 views
5

当我使用SqlCommandBuilder推送更新/插入/删除到服务器时,我是否需要拨打.GetUpdateCommand(),.GetInsertCommand().GetDeleteCommand()在使用SqlDataAdpater.Update()之前是否需要调用SqlCommandBuilder.GetUpdateCommand()?

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); 
} 

我看到的是什么正确的程序做conflictingexamples。我知道它没有它,但我不知道它是否在幕后做了一些特殊的事情。这是必要的还是货物崇拜编程?

回答

5

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

出于某种原因,当更新我的第4个表时,它无法正确插入。这让我感到困扰,所以我决定做更多的研究,这带给我了here。密切关注:

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

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

+0

不需要设置它们,我想知道为什么有些示例。 (我没有调用get命令就运行了我的代码,它更新了我的服务器。) – 2010-06-25 15:45:54

相关问题