我在我的项目中使用了通过DataSet
s 和DataTable
s 填充的网格。我使用DataNavigator
s on grid
s 来插入、删除和更新行,我想将更改提交到database
via OracleDataAdapter
。Update
. 我应该如何设置CommandText
for OracleDataAdapter
,update
而delete
只有insert
一个CommandText
?
问问题
5032 次
1 回答
2
当您使用 OracleDataAdapter 填充 DataTable 时,您将适配器保存在一个全局变量中,您可以在需要更新后端数据库上的数据表时重用该变量。该适配器可以链接到OracleCommandBuilder类的对象(正如其名称所解释的那样)为您构建适配器的 UpdateCommand、InsertCommand 和 DeleteCommand 属性。
当您调用 Adapter 的 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 无法创建相关命令,您需要手动定义它们
于 2013-05-28T09:08:29.157 回答