Команда обновления DataAdapter - PullRequest
3 голосов
/ 26 мая 2011

Я использую DataAdapter и DataTable для редактирования / добавления данных в таблицу Oracle db , используя поставщика ODP.NET .

DataSet ds = new DataSet("report");
DataTable dt = new DataTable("report");
adptr = new OracleDataAdapter();
string myCmd = "select * from report";            

OracleCommand _cmd = new OracleCommand(myCmd, myDbConnection);

adptr.SelectCommand = _cmd;
adptr.Fill(dt);
ds.Tables.Add(dt);

После этого я изменяю данные в таблице данных, привязывая их к сетке, редактирую и сохраняю так:

OracleCommandBuilder _cmdBld = new OracleCommandBuilder(adptr);
adptr.Update(ds, "report");

К настоящему моменту все замечательно, все работает как положено, каждая модификация передается в DB . Но моя проблема заключается в следующем - когда я получаю данные из более чем одной таблицы. как это:

string myCmd = 
    "select r.id, u.username, r.creation_date, r.owner 
     from report r inner join users u on r.user_id == u.id";

Я знаю, что мог написать команду обновления DataAdapter вручную (DataAdapter.UpdateCommand) перед сохранением, но я не уверен как. Можете ли вы дать мне несколько указаний?

Спасибо!

1 Ответ

4 голосов
/ 26 мая 2011

Проверьте пример, представленный в MSDN.Я думаю, OracleDataAdapter работает с той же логикой.http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.updatecommand.aspx

Вот секция генерации команды обновления по указанной ссылке

// Create the UpdateCommand.
command = new SqlCommand("UPDATE Customers SET CustomerID = @CustomerID, "+
     "CompanyName = @CompanyName WHERE CustomerID = @oldCustomerID", connection);
// Add the parameters for the UpdateCommand.
command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID");
command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 40, "CompanyName");
SqlParameter parameter = command.Parameters.Add("@oldCustomerID", 
     SqlDbType.NChar, 5, "CustomerID");
parameter.SourceVersion = DataRowVersion.Original;    
adapter.UpdateCommand = command;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...