因由:
之前很少接触数据库连接的底层,对此了解甚少。 最近有需求大量修改数据,遂搜到两篇文章
1<Oracle批量导入100万条数据不到1秒>http://blog.csdn.net/mrobama/article/details/53813133
2<Oracle Data Provider for .NET 的使用经验(2 )>http://blog.csdn.net/xinsir/article/details/1014696
以文章2为底本写了个段UpdateCommand 发现报错如下:违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 解决办法
网上说可能是由于 #1 检查是否设有主键#2检查更新的字段的原始值是否为空值 两个问题引起的
逐一解决 未果
最后到msdn上寻找答案
https://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracledataadapter.updatecommand(v=vs.110).aspx
解决:
由原文的 //更新用的oracle command
oraParameter = new OracleParameter("I_VPAYPASSWORD", OracleDbType.Varchar2, 2000);
oraParameter.SourceColumn = "VPAYPASSWORD";//更新字段值
oraParameter.SourceVersion = DataRowVersion.Current;
cmdUpdate.Parameters.Add(oraParameter);
散布在过程代码里
改为:实例化一个OracleDataAdapter
OracleDataAdapter cca = CreateCustomerAdapter(con);
nRecCount=cca.Update(i_Data);
实现如下
public static OracleDataAdapter CreateCustomerAdapter(OracleConnection conn)
{
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd;
OracleParameter parm;
// Create the UpdateCommand.
cmd = new OracleCommand("UPDATE tableA SET Current = :I_Current WHERE Orig= :I_Orig", conn);
cmd.Parameters.Add("I_Current", OracleDbType.Varchar2, 2000, "Current");
//cmd.Parameters.Add("pDName", OracleType.NVarChar, 14, "DName");
parm = cmd.Parameters.Add("I_Orig", OracleDbType.Varchar2, 10, "Orig");
parm.SourceVersion = DataRowVersion.Original;
da.UpdateCommand = cmd;
return da;
}