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”值为“TableZ”。我怎样才能解决这个问题?我无法更改我的 SQL 语句来填充表格。我能做些什么来让 DataAdapter 对正确的表执行吗?(表 X)

4

1 回答 1

0

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

return cb.DataAdapter.Update(table);

然后 CUD 命令将生成正确的。

于 2011-05-09T11:05:19.920 回答