处理问题:变量名‘@UserName’已声明。变量名在插叙批次或存储过程内部必须唯一
2013-03-26 19:08
567 查看
在做.net版机房收费系统时,遇到这样一个问题:登陆系统时,在B层的登陆函数UserLogin_BLL()中调用了D层的两个函数—判断用户是否存在IsUserExist_DA(),验证密码是否正确CheckPassWord_DA()。在D层的这两个方法中的sql语句及设置参数分别是:
(1)
(2)
(注意:两个sql语句中都有@UserName这个参数)
执行B层的UserLogin_BLL()函数时,就需要执行D层的IsUserExist()和CheckPassWord()两个函数,对吧!!
那么此时问题就出现了:报如下错:
问题在于:
在多次执行SqlCommand的时候,第一次执行没有错..第二次就会出现变量名在批查询或存储过程内部必须唯一,
这是因为以前的参数还存在事务中。所以在执行第二次时,变量无法辨别,我们只需SqlCommand执行完毕后,添加如下语句即可:cmd.Parameters.Clear();就可以了,也就是在同一事务中若要多次执行带有相同参数名的SQL语句,必须在第一次执行后清理参数.
如下代码:(此代码是我的sqlhelper中的一个函数)
(1)
'sql语句 Dim sql As String = "SELECT COUNT(*) FROM T_UserInfo WHERE UserName=@UserName" '设置参数 Dim parameter As SqlParameter = New SqlParameter("@UserName", enUser.UserName)
(2)
'sql语句 Dim sql As String = "SELECT UserName,PassWord FROM T_UserInfo WHERE UserName=@UserName AND PassWord=@PassWord" '设置参数 Dim parameters() As SqlParameter = { New SqlParameter("@UserName", enUser.UserName), New SqlParameter("@PassWord", enUser.PassWord) }
(注意:两个sql语句中都有@UserName这个参数)
执行B层的UserLogin_BLL()函数时,就需要执行D层的IsUserExist()和CheckPassWord()两个函数,对吧!!
那么此时问题就出现了:报如下错:
问题在于:
在多次执行SqlCommand的时候,第一次执行没有错..第二次就会出现变量名在批查询或存储过程内部必须唯一,
这是因为以前的参数还存在事务中。所以在执行第二次时,变量无法辨别,我们只需SqlCommand执行完毕后,添加如下语句即可:cmd.Parameters.Clear();就可以了,也就是在同一事务中若要多次执行带有相同参数名的SQL语句,必须在第一次执行后清理参数.
如下代码:(此代码是我的sqlhelper中的一个函数)
相关文章推荐
- 处理问题:变量名‘@UserName’已声明。变量名在插叙批次或存储过程内部必须唯一
- 变量名‘@cardno1’已声明。变量名在插叙批次或存储过程内部必须唯一
- 机房重构——Pramaters_变量名 '@UserID' 已声明。变量名在查询批次或存储过程内部必须唯一
- ADO.NET参数化查询时问题, 变量名"@telNum"已声明。变量名在批查询或存储过程内部必须唯一
- 变量名 @XXX 已声明。变量名在批查询或存储过程内部必须唯一
- 变量名 @XXX 已声明。变量名在批查询或存储过程内部必须唯一
- 关于“变量名在批查询或存储过程内部必须唯一”的解决办法
- oracle 存储过程中date类型变量声明中to_date赋值丢失时分秒问题
- 存储过程内部查询条件约束失效的问题(查询变量与表内字段相同引起)
- Mysql存储过程的declare声明变量必须放在最前面
- (转载)表变量在存储过程中出现了"必须声明表变量"的错误
- 表变量在存储过程中出现了"必须声明表变量"的错误
- sql server存储过程:错误21037: [SQL-DMO]在Text 属性的“CREATE...”语句中指定的名称必须与Name....问题解决
- 存储过程中拼接的变量和点的问题
- 存储过程中“Select Top 变量”的问题如何解决
- MyEclispe配置struts2出现There is no Action mapped for namespace [/] and action name [user_all]...问题处理
- mysql高级语法:变量声明, 游标, 函数, 存储过程, 循环体, 触发器
- SQL2005创建带有通配符的存储过程(INT字段类型必须在参数中声明为字符串型)
- oracle存储过程中异常处理应注意的问题
- Oracle 存储过程错误之PLS-00201: 必须声明标识符