【发布时间】:2018-02-20 12:58:26
【问题描述】:
我需要将 DataGridView 中的特定行插入到 Oracle DB 表中。我所做的是为 OracleDataAdapter 设置 InsertCommand,创建一个具有相同列名的新空 DataTable 并用它填充 OracleDataAdapter。然后我遍历 DataGridView 中的行,将所需的行添加到 DataTable,然后调用 da.Update() 方法 - 但它不起作用,我得到 "Value cannot be null.Parameter name:command"同一行出现错误 - da.Fill()...这是我描述的代码:
private OracleDataAdapter da = new OracleDataAdapter();
private void Inicialize_adapter()
{
OracleConnection conn = new OracleConnection(conn_string);
conn.Open();
OracleCommand insert = new OracleCommand("Myschema.InsertToTable", conn);
insert.Parameters.Add("ID_IN", OracleDbType.Decimal, 4, "ID");
insert.Parameters.Add("ID_FK_IN", OracleDbType.Decimal, 4, "ID_FK");
insert.Parameters.Add("SERIAL_IN", OracleDbType.Decimal, 4, "SERIAL_NO");
da.InsertCommand = insert;
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
conn.Close();
}
我的 ButtonSave_Click 中的代码:
...
Inicialize_adapter();
DataTable dt_Test = new DataTable();
DataColumn dc = new DataColumn("ID", typeof(int));
dt_Test.Columns.Add(dc);
dc = new DataColumn("ID_FK", typeof(int));
dt_Test.Columns.Add(dc);
dc = new DataColumn("SERIAL_NO", typeof(int));
dt_Test.Columns.Add(dc);
var sequence = New_id(1); // this get's me next sequence in DB
int increase_seq = 0;
foreach (DataGridViewRow row in MyDGV.Rows)
{
if (row.Cells[0].Value == "Added")
{
DataRow newRow = dt_Test.NewRow();
newRow[0] = sequence+increase_seq;
newRow[1] = 2";
newRow[2] = row.Cells[1].Value;
dt_Test.Rows.Add(newRow.ItemArray);
++increase_seq;
}
}
//Fill Adapter -error here
da.Fill(dt_Test);
da.Update(dt_Test);
...
我也尝试过其他选项,例如 Array Binding,但效果不佳,所以我希望它能够以这种方式工作,因为它更简单。有人知道我的代码有什么问题吗?提前感谢您的帮助!
【问题讨论】:
-
这是你的插入命令? “Myschema.InsertToTable”?
-
@RenatoAfonso,这是数据库中的存储过程,用于插入到一些相关的表中,所以是的。这可能是 DataAdapter.Fill() 和 Command 之间的冲突吗?