今天调试程序,遇到一个奇怪的异常。

程序非常简单,就是从一个表中取出一个符合要求的数据,如果取到,就把该数据对应的计数加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/ishare/archive/2009/04/28/1445341.html

搞定“另一个 OleDbParameterCollection 中已包含 OleDbParameter。”的两种办法。相关推荐

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

    程序非常简单,就是从一个表中取出一个符合要求的数据,如果取到,就把该数据对应的计数加1. 也就是执行不同的两个SQL语句操作同一个表,并且这两个SQL的参数是一样的.在一个函数里完成这个调用. 执行第 ...

  2. 另一个 OleDbParameterCollection 中已包含 OleDbParameter

    今天调试程序,遇到一个奇怪的异常. 程序非常简单,就是从一个表中取出一个符合要求的数据,如果取到,就把该数据对应的计数加1. 也就是执行不同的两个SQL语句操作同一个表,并且这两个SQL的参数是一样的 ...

  3. [转]另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]

    本着代码重用,减少变量的创建,希望参数能够重复使用 DataBase db = new DataBase();         SqlParameter[] prams ={ db.MakeInPar ...

  4. EF另一个 SqlParameterCollection 中已包含 SqlParameter。

    代码: SqlParameter[] commandParameters = new SqlParameter[]{new SqlParameter("@CultID",filte ...

  5. 另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]

    另一个SqlParameterCollection 中已包含 SqlParameter[解决方案] 参考文章: (1)另一个SqlParameterCollection 中已包含 SqlParamet ...

  6. mysql idataparameter_[转]另一个SqlParameterCollection 中已包含 SqlParameter[解决方案]

    本着代码重用,减少变量的创建,希望参数能够重复使用 DataBase db = new DataBase(); SqlParameter[] prams ={ db.MakeInParam(" ...

  7. C#数据库插入多条数据,抛出异常:另一个 SqlParameterCollection 中已包含 SqlParameter

    解决办法很简单:添加语句:cmd.Parameters.Clear(); 原理:在SqlCommand使用完后清理SqlParameter. 代码示例: //定义连接数据库的配置字符串,需要填入你的连 ...

  8. 另一个 OracleParameterCollection 中已包含 OracleParameter

    出现这个错误的时候,我按照百度来的方法 在finally里面加cmd.Parameters.Clear(); 在 foreach (OracleParameter parm in cmdParms){ ...

  9. 计算一个连通分量中节点的个数的两种方法

    POJ 1611 The Suspects(并查集) 2014年03月11日 11:17:28 阅读数:1027 POJ 1611 The Suspects(并查集) http://poj.org/p ...

最新文章

  1. 洛谷P4053 [JSOI2007]建筑抢修
  2. 分享6 个值得收藏的 Python 代码
  3. excel中使用CORREL函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
  4. HDLBits 系列(4)如何设计一定不会产生Latch的组合逻辑?
  5. 初次使用Android Studio问题,Android Studio往项目中添加图片
  6. java示例_Java入门示例
  7. 《秋暮登北楼》王武陵
  8. 计算广告 pdf_小学生PDF格式的试卷怎么编辑修改
  9. 【NLP】基于GloVe词向量的迁移学习
  10. C++ TR1、TR2与boost的关系
  11. SwiftUI之如何创建常量绑定与自定义绑定
  12. php object添加到数组,PHP Object转换为数组array
  13. 高校实验室管理系统_史上最全面的实验室信息管理系统(LIMS)全解
  14. 电脑开机3秒就重启循环_电脑修好后客户不愿支付上门费,行,那电脑开机60秒自动关机吧!...
  15. java jar命令_Java命令行之jar命令
  16. SolarWinds 事件新动态:研究员发现新的C2基础设施
  17. 质疑“扩版=质量下降”——以《中国农学通报》和《安徽农业科学》为例
  18. 语言怎么得到直流电压并采样_250V10A高频直流电源/大电流直流稳压稳流电源
  19. linux查找进程并删除文件,Linux find 查找 并删除文件 杀掉进程
  20. 修改群晖mac 及 sn

热门文章

  1. 通过项目逐步深入了解Spring MVC(一)
  2. MySQL 故障集锦
  3. 清理恶意插件提高上网速度
  4. 使用NAT实现TCP负载均衡
  5. 别拒绝生命中偶尔的初恋
  6. 对FCKEditor = 2.6.4 通杀 exploit 的分析
  7. ***如何优雅的选择字体(font-family)
  8. 入门指引 - PHP手册笔记
  9. 游戏开发中的图像生成
  10. 高性能的MySQL(7)字符集和校对