用于更新数据集的OracleDataAdapter CommandText

时间:2013-05-28 08:48:46

标签: c# database datagrid odp.net

我在我的项目中使用的网格是通过DataSetDataTable填充的。 我在DataNavigator上使用grid来插入,删除和更新行,我想通过database OracleDataAdapter将更改提交到UpdateCommandText。 如果只有OracleDataAdapter,我应该如何为updatedeleteinsert CommandText设置{{1}}?

1 个答案:

答案 0 :(得分:2)

使用OracleDataAdapter填充DataTable时,将适配器保存在一个全局变量中,当需要更新后端数据库上的数据表时,可以重用该变量。此适配器可以链接到类OracleCommandBuilder的对象(如名称所示),为您构建适配器的UpdateCommand,InsertCommand和DeleteCommand属性。

当您调用适配器的Update方法时,这些命令用于执行sql指令以更新表。

OracleDataAdapter _dataAdapter = null;

public void FillDataGridView(string conString, string selectCmd, string tableName)
{
   using(OracleConnection con = new OracleConnection(conString))
   {
       _dataAdapter = new OracleDataAdapter();
       _dataAdapter.SelectCommand = new OracleCommand(selectCmd, con);
       OracleCommandBuilder cb = new OracleCommandBuilder(_dataAdapter);
       con.Open();
       DataSet ds = new DataSet();
       _adapter.Fill(ds, tableName);
       dataGridView1.DataSource = ds.Tables[0];
   }
}

然后当你决定更新时

// The OracleCommandBuilder has initialized the Insert/Update/Delete 
// command of the adapter thus the Update works as expected
DataTable dt = dataGridView1.DataSource as DataTable;
_adapter.Update(dt);

CommandBuilder可以为您做什么是有限的。特别是如果select命令没有检索表的主键,或者select命令将表连接在一起,那么CommandBuilder无法创建相关命令,您需要手动定义它们