分析 异常:SqlParameter は、既に別の SqlParameterCollection に含まれています。

SqlParameter[] cmdParms= new SqlParameter[numKeywords];
cmdParms[0] = new SqlParameter("@SEIKYUSHOHAKKOUIRAINOFROM", SqlDbType.VarChar);
cmdParms[0].Value = billNoFrom;
cmdParms[1] = new SqlParameter("@SEIKYUSHOHAKKOUIRAINOTO", SqlDbType.VarChar);
cmdParms[1].Value = billNoTo;

foreach (SqlParameter parm in cmdParms)
  cmd.Parameters.Add(parm);


comParms 对象执行过[***.Add] 之后不能再使用,否则抛出异常:SqlParameter は、既に別の SqlParameterCollection に含まれています。想要再次引用cmdParms,可以通过拷贝的方式。
解决一:
SqlParameter[] parms2 = new SqlParameter[numKeywords];
for (int i = 0; i < numKeywords; i++)
{
    parms2 = (SqlParameter)((ICloneable)parms1).Clone();
}

这将执行一个深拷贝(deep copy)不会出现问题

解决二:

    cmd.Parameters.Clear();

    cmd.Parameters.Add(parm);
有条件可以使用这种方法,但是,如果cmd等已经被封装,那么只能用前一种或new。

posted on 2008-08-13 13:37  xinxinbb  阅读(1819)  评论(6)    收藏  举报