2010-06-25 52 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

相關問題