博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
另一个 OleDbParameterCollection 中已包含 OleDbParameter 错误分析及解决办法
阅读量:5217 次
发布时间:2019-06-14

本文共 809 字,大约阅读时间需要 2 分钟。

程序非常简单,就是从一个表中取出一个符合要求的数据,如果取到,就把该数据对应的计数加1。

也就是执行不同的两个SQL语句操作同一个表,并且这两个SQL的参数是一样的。在一个函数里完成这个调用。
执行第二个SQL调用时,老是提示“另一个 OleDbParameterCollection 中已包含 OleDbParameter。”
非常奇怪,两个SQL语句正确,参数设定正确,分开执行正确,一起执行就出错,百思不得其解。

在网上搜索,得到第一个解决办法:

foreach (OleDbParameter Param in ParamList) 

    //cmd.Parameters.Add(Param); 
    cmd.Parameters.AddWithValue(Param.ParameterName, Param.Value); 
}

把上面注释语句更改一下,没有异常了。虽然问题没有了,可是觉得很奇怪。继续搜索,

看到一个牛人的分析:OleDbParameter还有parent的。

第二个解决办法:

对上一个使用了 OleDbParameter 的 OleDbCommand,在使用完成之后,要

cmd.Parameters.Clear();

具体的分析过程就不说了。

学到最重要的一招,就是用Reflector去分析.net的源码。

再对比上面两种解决办法,

Parameters.Add 应该是传递的引用,OleDbCommand在执行过程中,更改了OleDbParameter的成员值,所以,在下一个调用OleDbParameter的OleDbCommand中,执行出错。

Parameters.AddWithValue 应该是内部重新生成一个OleDbParameter对象。

应该说,第二种解决办法更好一点。

转载于:https://www.cnblogs.com/zuowj/p/3476119.html

你可能感兴趣的文章
Linux相关TCP参数优化: proc/sys/net/ipv4/ 提高web质量
查看>>
IOTA私有链简单搭建
查看>>
关于电商平台目前环境的思考
查看>>
CSpinButtonCtrl控件的使用
查看>>
Java多态的使用
查看>>
SSH超时断开(ClientAliveInterval和ClientAliveCountMax )的使用
查看>>
技术文章的阅读姿势
查看>>
三期_day05_Dao层的准备工作_II
查看>>
React 新 Context API 在前端状态管理的实践
查看>>
POJ 3419 Difference Is Beautiful(RMQ+二分 或者 模拟)
查看>>
Android HTTP实例 发送请求和接收响应
查看>>
重新创建Activity
查看>>
Steps for Oracle Performance Tuning
查看>>
浅谈css的预编译---less语言
查看>>
通过修改qt设置,解决LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”
查看>>
压力开关
查看>>
div与span的区别
查看>>
Python3学习--介绍
查看>>
Struts2补充a
查看>>
前端面试(三)之原型链
查看>>