变量名“@"已被声明.变量名在查询批处理或存储过程中必须是唯一的.在 C# 中 [英] The variable name '@' has already been declared. Variable names must be unique within a query batch or stored procedure. in c#
本文介绍了变量名“@"已被声明.变量名在查询批处理或存储过程中必须是唯一的.在 C# 中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
变量名@LockState"已被声明.多变的名称在查询批处理或存储过程中必须是唯一的.
The variable name '@LockState' has already been declared. Variable names must be unique within a query batch or stored procedure.
当我执行下面的这段代码时,上面的错误出现在我的第二个@LockState 的 sql 参数上.
When I execute this code below, above error comes on my sql parameters on second @LockState.
private void btn_lock2_Click(object sender, EventArgs e)
{
rwd.command = new SqlCommand();
rwd.command.Connection = rwd.connection;
try
{
if ((txt2.Text == "")| (txt_desc2.Text == ""))
appMessages.unCompleteFields();
else
{
long from = long.Parse(this.txt2.Text);
long to = long.Parse(this.txt3.Text);
if (from <= to)
{
for (long counter = from; counter <= to; counter++)
{
string upd = "update card set LockState=@lockstate,
card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters.Add(new SqlParameter("@LockState",
SqlDbType.NVarChar)).Value =1;
rwd.command.Parameters.Add(new SqlParameter("@card_descr",
SqlDbType.NVarChar)).Value = txt_desc2.Text;
rwd.connection.Open();
rwd.command.ExecuteScalar();
rwd.connection.Close();
}
appMessages.successfulyUpdated();
}
else
{
appMessages.unsuccessfulyUpdated();
}
this.txt1.Text = "";
this.txt2.Text = "";
}
}
catch (Exception exp) { throw exp; }
}
}
推荐答案
您在循环的每次迭代中多次添加相同的参数.
You are adding multiple times the same parameters in every iteration of loop.
在每次循环迭代后添加rwd.command.Parameters.Clear()
:
Add rwd.command.Parameters.Clear()
after each loop iteration:
for (long counter = from; counter <= to; counter++)
{
rwd.command.Parameters.Clear();
string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters.Add(new SqlParameter("@LockState",
SqlDbType.NVarChar)).Value =1;
rwd.command.Parameters.Add(new SqlParameter("@card_descr",
SqlDbType.NVarChar)).Value = txt_desc2.Text;
rwd.connection.Open();
rwd.command.ExecuteScalar();
rwd.connection.Close();
}
或在循环前添加参数:
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));
然后循环:
for (long counter = from; counter <= to; counter++)
{
string upd = "update card set LockState=@lockstate,
card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters["@LockState"].Value =1;
rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text;
rwd.connection.Open();
rwd.command.ExecuteScalar();
rwd.connection.Close();
}
这篇关于变量名“@"已被声明.变量名在查询批处理或存储过程中必须是唯一的.在 C# 中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文