分析 异常: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。