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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
2013-04-25 大图剪切工具,大图分割工具