您的错误消息,“变量名 '@' 已被声明。变量名在查询批处理或存储过程中必须是唯一的”,表示 SQL 中的变量命名存在冲突代码。
在提供的代码片段中,当尝试在“btn_lock2_Click”事件处理程序中的循环中多次使用相同的变量名称“@LockState”时,会出现问题。 SQL 要求查询或存储过程中的变量名称唯一,以防止混淆和歧义。
一种解决方法冲突是在每次循环迭代之前清除参数集合。这可确保相同的参数名称不会多次添加到集合中。
for (long counter = from; counter {
rwd.command.Parameters.Clear(); // Clear the parameters collection before adding new parameters 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.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));
for (长计数器 = from; 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; ...
}
通过使用这些解决方案中的任何一个,您都可以确保您的 SQL 查询具有唯一的变量名称,从而防止“已声明”错误。
以上是为什么我的 SQL 查询会抛出'变量名称已声明”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!