另一个 OleDbParameterCollection 中已包含 OleDbParameter 错误分析及解决办法

简介:

程序非常简单,就是从一个表中取出一个符合要求的数据,如果取到,就把该数据对应的计数加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对象。

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

本文转自 梦在旅途 博客园博客,原文链接: http://www.cnblogs.com/zuowj/p/3476119.html ,如需转载请自行联系原作者

相关文章
【问题记录】启动 Navicat 的过程中,遇到:Missing required library sqlite.dll,998
【问题记录】启动 Navicat 的过程中,遇到:Missing required library sqlite.dll,998
【问题记录】启动 Navicat 的过程中,遇到:Missing required library sqlite.dll,998
|
SQL 数据库
Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题
原文:Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题 公司深圳团队开发有一套系统在华北区这边推向客户,在一次更新补丁时,由于发生了数据字典的变更,但深圳团队并未给出数据库的更新脚本,只给了新版本的数据库创建脚本,为了保证客户方系统中已有数据不丢失,只能自己想办法了:用Powerdesigner把新版本数据库逆向过来后,将此模型Apply到已有数据库中,此时Powerdesigner会比较两个版本的差异,只更新差异而不会丢失数据了。
1096 0
|
SQL
解决adop prepare过程Dictionary Corrupted 错误
用户在用adop 打补丁的时候,出现数据字典损坏的报错: Dictionary Corrupted: Details are as follows: OWBSYS          HAB_RT_EXEC_PROC_RUN_METRICS    ...
1029 0
|
Oracle 关系型数据库
oracle ORA-00917: missing comma 是因为少逗号
oracle ORA-00917: missing comma 是因为少逗号,而且不是网上盛传的空格问题!都是传言误人啊
2209 0