• 另一个 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对象。

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

  • 相关阅读:
    1722 最优乘车 1997年NOI全国竞赛
    5969 [AK]刻录光盘
    tarjan算法讲解
    求有向图的强连通分量个数 之 Kosaraju算法
    信使
    1405 奶牛的旅行
    P1828 香甜的黄油 Sweet Butter
    洛谷P2235 [HNOI2002]Kathy函数
    「BZOJ1010」[HNOI2008] 玩具装箱toy(斜率优化)
    BZOJ 1974 [Sdoi2010] auction 代码拍卖会(数位dp)
  • 原文地址:https://www.cnblogs.com/zuowj/p/3476119.html
Copyright © 2020-2023  润新知