У меня есть типизированный набор данных с 2 таблицами данных, TableX и TableY. Создано в дизайнере. Нет адаптеров таблиц.
Когда я заполняю TableX, я запускаю SQL и извлекаю данные из другой таблицы, TableZ.
Таблица заполняется записями, а TableX.tableName равно «TableX».
Но когда я использую datadapter и commandbuilder для генерации команды update для TableX, он вместо этого пытается обновить 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);
При обновлении генерируется инструкция SQL, которая начинается с «update TableZ ...». Это должно было быть «Update 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 выполнялся с нужной таблицей? (TableX)