大马资讯论坛 - 马来西亚中文资讯平台

标题: The SqlParameter is already contained by another SqlParameterCollection [打印本页]

作者: 资讯王    时间: 2009-6-26 11:36
标题: The SqlParameter is already contained by another SqlParameterCollection
来源:http://ayujimmy.spaces.live.com/blog/cns!C1A2961B8FB8BA86!306.entry

当你尝试一下DB操作,会可能遇到一些exception:
分别用两个SqlCommand对象来执行两条cmd,但是这两个cmd有相同的Parameters,因此你会对两个cmd都执行cmd.Parameters.Add()。此时,会可能出现
System.ArgumentException: The SqlParameter is already contained by another SqlParameterCollection
需要insert多个记录,而你想用一个loop来执行cmd.Parameters.Add(); cmd.ExecuteNonQuery(); 其实问题和上一个很相似,而此时可能会出现
System.Data.SqlClient.SqlException: The variable name `@MyParam` has already been declared. Variable names must be unique within a query batch or stored procedure.
这类问题都一个共同特征是,对多个cmd添加相同的参数。解决办法是,当每次执行完cmd的时候,或者要执行cmd之前,都调用一下
  1. cmd.Parameters.Clear();
复制代码
这样就可以保证每次都Parameters都是“新鲜”的。其实早在ASP时代就已经有此问题,当时是在添加参数之前运行
  1. cmd.Parameters.Refresh
复制代码
MSDN上面没有对这个问题有太多说明,可能是因为Parameters本身只是一个collection,其Clear()函数并不特殊。但是回到SqlCommand这个问题上,我怀疑所以的cmd对象都是共用同一个Parameters collection的。所以,如果在同一个collection添加两个相同的key就一定产生问题了。




欢迎光临 大马资讯论坛 - 马来西亚中文资讯平台 (http://freeinfo.com.my/) Powered by Discuz! X3.3