【问题标题】:Does SqlCommandBuilder.GetUpdateCommand() need to be called before using SqlDataAdpater.Update()?在使用SqlDataAdpater.Update()之前是否需要调用SqlCommandBuilder.GetUpdateCommand()?
【发布时间】:2011-03-08 08:23:18
【问题描述】:

当我使用 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 知道正确的程序是什么。我知道没有它也可以工作,但我不知道它是否在幕后做了一些特别的事情。这是必要的还是货物崇拜编程?

【问题讨论】:

    标签: c# sqlcommandbuilder


    【解决方案1】:

    我对我的测试数据库进行了一些测试,看看我是否能想出一个如果我不调用GetInsertCommand() 就会发生错误的场景。事实证明它可能会发生,就我而言,它发生在我更新数据库中的几个不同表时。

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

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

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

    【讨论】:

    • 不需要设置它们,我想知道为什么有些例子会这样做。 (我在没有调用 get 命令的情况下运行了我的代码,它更新了我的服务器。)
    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 2011-02-26
    • 2023-03-29
    • 2011-09-02
    • 1970-01-01
    相关资源
    最近更新 更多