【问题标题】:Custom writing OleDbCommand commands自定义编写 OleDbCommand 命令
【发布时间】:2009-03-09 10:15:48
【问题描述】:

我有(另一个)关于编写 OleDbCommand 的问题。我有一个复杂的选择命令(包括几个左连接)并且 OleDbCommandBuilder 无法为我生成更新命令。

我似乎无法掌握编写更新命令背后的魔力。我知道 SQL 更新语句的结构,但是我对它如何与 OleDbDataAdapter 一起工作感到有点困惑。我知道当我调用 adapter.Update() 时,它只会更新 DataTable 的必要行,但是我不知道如何编写更新命令,因此它能够知道 what table 中的哪个字段em> 需要更新。

如果有人能向我解释这个过程并指出正确的方向,我将不胜感激。

编辑:由于没有人回答,我将发布有关我的问题的更多详细信息:

我有一个这样的选择语句:

select field1, field2, fieldn from table1 left join table2 on condition left join table3 on condition where condition1 and condition2

一个让我困惑的是我应该如何写一个更新语句,因为我不能这样写:

update table1, table2 set field1 = newvalue where condition1 and condition2

所以我不明白该怎么做,因为 update 语句只接受一个表参数。甚至可以在这种 DataTables 上调用 OleDbDataAdapter.Update 方法吗?

【问题讨论】:

    标签: c# sql oledb oledbcommand


    【解决方案1】:

    你想这样做吗?

    update table1 set table1.field1 = table2.field2
    from table1 left join table2 on condition1
    where condition2 and condition3
    

    我很确定您一次不能更新多个表。因此,您必须为每个表发出一个更新语句。 如果你想减少到服务器的往返次数,你可以用“;”分隔语句,或者调用一个存储过程来执行 n 次更新

    还是看看INSTEAD OF triggers吧,这也许就是你要找的东西

    【讨论】:

    • 嗯,这绝对是有帮助的,但是仍然存在问题。 DataRow 包含来自不同表的列,其中任何一个都可以修改 - 我仍然不清楚如何编写可以修改任何一个字段的更新命令。
    • 我很确定您必须为每个表发出更新语句然后...
    • 查看 INSTEAD OF 触发器,这可能是您正在寻找的东西
    猜你喜欢
    • 2014-08-18
    • 2021-03-09
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2021-08-02
    • 2014-04-19
    • 1970-01-01
    相关资源
    最近更新 更多