0

TableXとTableYの2つのデータテーブルを持つ型付きデータセットがあります。デザイナーで作成。TableAdaptersはありません。

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);

この更新により、「updateTableZ...」で始まるSQLステートメントが生成されます。「TableXを更新...」である必要があります。

これは、データテーブルを埋めるメソッドが、別のテーブル「select ....... from TableZ」からデータを取得するSQLステートメントを実行し、データテーブルスキーマで次のように読み取るためだと思います。

<?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を適切なテーブルに対して実行するためにできることはありますか?(TableX)

4

1 に答える 1

0

私は解決策を見つけました。を呼び出す前に、dataadapter で CUD コマンドを作成しました。

return cb.DataAdapter.Update(table);

次に、CUD コマンドが正しく生成されます。

于 2011-05-09T11:05:19.920 に答える