违反并发性: UpdateCommand影响了预期 1 条记录中的 0 条 重写后解决

因由:

之前很少接触数据库连接的底层,对此了解甚少。 最近有需求大量修改数据,遂搜到两篇文章

   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;
        }









  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值