zoukankan      html  css  js  c++  java
  • Oracle.ManagedDataAccess.dll折腾了我两天

    有个C#写的数据采集程序,我们负责把本地mysql数据库的数据周期性(5分钟)往Oracle数据库中插入数据。

    我使用的是OracleDataAdapter.update操作上传的,同时使用了OracleCommandBuilder对象。

    以前运行正常,这几天对方把表中的字段类型修改了,从varchar改成date了,我这边程序也可处理一下,然后问题来了:

    总是出现 “未将对象引用到实例” 错误,由于我本地无法连接Oracle数据库,我只能在本地修改,然后把程序上传到数据库上运行。

    程序会同时上传到两个表,我几乎逐句加日志(写日志表),最后得到结论,插入一个表时正常,另一个表时出“空引用”,并且是OracleDataAdapter.update这条语句触发的异常。而写入数据库操作是一个公用的函数,即两次插入调用的同一个函数,参数不一样。但成功的表插入数据少一些100条,失败的插入多一些600条左右(当时并未意识到数据多少的问题)。

    最后没有办法,在服务器上安装了vs开发环境,单步跟踪,发觉两个插入全部执行成功,没有什么异常。但正常运行时又出“空引用”异常。

    后来改为Relese编译发布,好像运行不出错了。但后来又出错了。

    后来不知怎么想到把 UpdateBatchSize 改小一点试试,改成10吧,一试真好使,全部成功,无论Release还是Debug全部成功

    至此,已定位出问题所在,把 UpdateBatchSize=100程序恢复正常。

    前面单步跟踪时没有出错,是因为调试时未接收外部数据,造成插入的数据行数较少。

    原来的代码UpdateBatchSize=0,因为文档上是说系统自动使用最大可用数量,设置为0时在mssql和mysql中都运行很正常。

    Oralce在未修改字段类型前不知为何运行正常,这个也不想再研究了。

    感觉是OracleDataAdapter.update的一个bug

     

  • 相关阅读:
    690. Employee Importance 员工重要性
    682. Baseball Game 棒球比赛计分
    680. Valid Palindrome II 有效的回文2
    553. Optimal Division 最佳分割
    服务器oracle数据库定时备份
    数据类型和抽象数据类型
    静态链表和动态链表的区别:
    it网站
    java 移动开发获取多级下拉框json数据的类和mobile-select-area插件
    redis持久化之aof篇
  • 原文地址:https://www.cnblogs.com/81/p/14700262.html
Copyright © 2011-2022 走看看