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

 找回密码
 注册
搜索
打印 上一主题 下一主题

The SqlParameter is already contained by another SqlParameterCollection

[复制链接]
跳转到指定楼层
1#
发表于 2009-6-26 11:36:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
来源: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就一定产生问题了。

手机版|大马资讯论坛  

GMT+8, 2024-4-30 00:20 , Processed in 0.030507 second(s), 13 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表