【发布时间】:2018-11-24 04:09:08
【问题描述】:
我的问题标题可能是错误的,不要为此生气,但请让我解释一下我的问题是什么。
首先,我创建了一个存储过程,它从我的数据绑定 DatagridView 中执行插入/更新或删除,所有这些都在一起。这是通过将不同的参数值传递给我的插入命令/更新命令/删除命令的 TableAdapter 设置中的存储过程来完成的。目前我这样解决这个问题:
private void InicializeAdapter()
{
da = new OracleDataAdapter();
OracleConnection conn = new OracleConnection(conn_string);
conn.Open();
OracleCommand select = new OracleCommand("MySelectProcedure", conn);
OracleCommand ins_upd = new OracleCommand("MyProcedure", conn);
OracleCommand delete_rec = new OracleCommand("MyProcedure", conn);
select.CommandType = CommandType.StoredProcedure;
ins_upd.CommandType = CommandType.StoredProcedure;
delete_rec.CommandType = CommandType.StoredProcedure;
ins_upd.Parameters.Add(new OracleParameter("ID_IN", OracleDbType.Decimal, 4, "ID"));
ins_upd.Parameters.Add(new OracleParameter("DELETE_IN", OracleDbType.Decimal)).Value = 0;
ins_upd.Parameters.Add(new OracleParameter("SERIAL_IN", OracleDbType.Varchar2, 50, "SERIAL"));
delete_rec.Parameters.Add(new OracleParameter("ID_IN", OracleDbType.Decimal, 4, "ID"));
delete_rec.Parameters.Add(new OracleParameter("DELETE_IN", OracleDbType.Decimal)).Value = 1;
delete_rec.Parameters.Add(new OracleParameter("SERIAL_IN", OracleDbType.Varchar2, 50, "SERIAL"));
da.SelectCommand = select;
da.UpdateCommand = ins_upd;
da.InsertCommand = ins_upd;
da.DeleteCommand = delete_rec;
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
conn.Close();
}
简而言之,当我插入或更新时,我将参数“DELETE_IN”=0 发送到 Oracle,当我从 DatagridView 中删除行时,我发送参数“1”。这样甲骨文就知道该怎么做了,我的代码也能正常工作......
我的问题是 - 我如何才能仅根据发生的变化传递该参数的不同值,而不是再次为 DeleteCommand 写入所有参数,如您在上面的示例中看到的那样?我正在考虑类似检查是否有插入/更新或删除命令,例如:
If (dataAdapter1.InsertCommand)
{
ins_upd.Parameters.Add(new OracleParameter("DELETE_IN", OracleDbType.Decimal)).Value = 0;
}
else if(dataAdapter1.Deletecommand)
{
ins_upd.Parameters.Add(new OracleParameter("DELETE_IN", OracleDbType.Decimal)).Value = 0;
}
我问是因为这会大大缩短我的代码。我知道可以在 DataTable 中监控更改,但是我在为 DataAdapter 分配命令时不知道如何使用它。
任何帮助表示赞赏,在此先感谢!
P.S.:我的Datagridview绑定到BindingSource,BindingSource的数据源是Datatable。
【问题讨论】:
-
您的第二个代码示例无法编译。
if (dataAdapter1.InsertCommand)在 C# 中不起作用。 -
@Sefe,当然不是,这只是一个比喻,我需要解决我的问题。我需要知道 DataAdapter 何时选择执行插入、更新或删除命令,以便将我的参数值正确传递给 Oracle。这是我的问题。
-
不清楚你想用
if (dataAdapter1.InsertCommand)实现什么。该条件不是布尔值,它是一个公开猜测您要检查的条件。我不清楚if的用途,因为适配器会自动选择正确的命令。if和else的主体是相同的。我建议您用文本描述您的预期解决方案,因为我很难从代码示例中理解它,无论它是否编译。
标签: c# dataadapter