.net dataadapter 更新在错误的表上执行

发布于 2024-11-04 22:01:09 字数 1265 浏览 1 评论 0原文

我有一个带有 2 个数据表(TableX 和 TableY)的类型化数据集。在设计师中创建。没有表适配器。

当我填充 TableX 时,我运行 SQL 并从另一个表 TableZ 获取数据。 该表填满了记录,TableX.tableName 为“TableX”。

但是,当我使用 datadapter 和 commandbuilder 为 TableX 生成 updatecommand 时,它会尝试更新 TableZ。我怎样才能改变这个?

Oracle.DataAccess.Client.OracleDataAdapter da = new OracleDataAdapter("select * from " + table.TableName, this.Connection);
Oracle.DataAccess.Client.OracleCommandBuilder cb = new OracleCommandBuilder(da);
return cb.DataAdapter.Update(table);

更新会生成一条以“update TableZ...”开头的 SQL 语句。它应该是“更新 TableX...”。

我猜这是因为填充数据表的方法运行一个sql语句,该语句从另一个表“select ....... from TableZ”获取数据,并在数据表模式中读取:

<?xml version="1.0" standalone="true"?>
<dsConsignmentReport xmlns="http://tempuri.org/dsConsignmentReport.xsd">
    <xs:schema xmlns="http://tempuri.org/dsConsignmentReport.xsd" elementFormDefault="qualified" ...."> 
        <xs:element msdata:EnforceConstraints="False" msdata:Locale="nb-NO" ...> 
        <xs:complexType> 
        <xs:choice maxOccurs="unbounded" minOccurs="0"> -<xs:element name="TABLEX" msprop:BaseTable.0="TABLEZ">

它表示“baseTable”值是“表Z”。 我该如何解决这个问题?我无法更改用于填充表的 SQL 语句。我可以做些什么来让 DataAdapter 针对正确的表执行吗? (表X)

I have a typed dataset with 2 datatables, TableX and TableY. Created in designer. No TableAdapters.

When I fill the TableX I run an SQL and fetch data from another table, TableZ.
The table fills up with records and the TableX.tableName is "TableX".

But when I use datadapter and commandbuilder to generate updatecommand for TableX it tries to update TableZ instead. How can I change this?

Oracle.DataAccess.Client.OracleDataAdapter da = new OracleDataAdapter("select * from " + table.TableName, this.Connection);
Oracle.DataAccess.Client.OracleCommandBuilder cb = new OracleCommandBuilder(da);
return cb.DataAdapter.Update(table);

The update generates an SQL statement which starts with "update TableZ...". It should have been "Update TableX...".

I guess this is because the method which fills the datatable runs an sql statement which gets data from another table "select ....... from TableZ", and in the datatable schema it reads:

<?xml version="1.0" standalone="true"?>
<dsConsignmentReport xmlns="http://tempuri.org/dsConsignmentReport.xsd">
    <xs:schema xmlns="http://tempuri.org/dsConsignmentReport.xsd" elementFormDefault="qualified" ...."> 
        <xs:element msdata:EnforceConstraints="False" msdata:Locale="nb-NO" ...> 
        <xs:complexType> 
        <xs:choice maxOccurs="unbounded" minOccurs="0"> -<xs:element name="TABLEX" msprop:BaseTable.0="TABLEZ">

which says that the "baseTable" value is "TableZ".
How can I get around this problem? I cannot change my SQL statement for filling the table. Is there anything I can do to get the DataAdapter to execute against the right table? (TableX)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苹果你个爱泡泡 2024-11-11 22:01:09

我找到了一个解决方案。
我在调用之前在 dataadapter 中构建了 CUD 命令,

return cb.DataAdapter.Update(table);

然后 CUD 命令将正确生成。

I found out a solution.
I built the CUD commands in dataadapter BEFORE calling the

return cb.DataAdapter.Update(table);

Then the CUD commands will generate right.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文