我正在尝试从列表中更新数据库中的列
command = new SqlCommand("update Login_Users set Password=@a where UserName !='" + null + "'", Db);
Db.Open();
for (int i = 0; i < list.Count; i++)
{
list[i] = Encrypt(list[i]);
command.Parameters.AddWithValue("@a",list[i]);
int a = command.ExecuteNonQuery();
}
但是我收到了这个错误:
变量名已经被声明
答案 0 :(得分:1)
您的命令只有一个参数,但您尝试通过每个循环添加一个新参数(通过AddWithValue
... 添加值)
将command
声明放在循环中(如下所示),或使用其他方法之一更新值。
Db.Open();
for (int i = 0; i < list.Count; i++)
{
command = new SqlCommand("update Login_Users set Password=@a where UserName !='" + null + "'", Db);
list[i] = Encrypt(list[i]);
command.Parameters.AddWithValue("@a",list[i]);
int a = command.ExecuteNonQuery();
}
答案 1 :(得分:0)
为什么在查询中你会这样做:
其中UserName!=&#39;&#34; + null +&#34;&#39;&#34;
我认为更具可读性是这样的:
其中UserName!=&#39;&#39;
或
其中UserName&lt;&gt;&#39;&#39;
答案 2 :(得分:0)
您已使用包含参数@a
的SQL语句设置SqlCommand。使用该集,您可以在将参数ExecuteQuery
设置为不同值后,通过@a
多次调用该命令。
在for
循环中,语句command.Parameters.AddWithValue()
可能会添加到命令附加参数,但没有两个参数可以具有相同的值,因此如果您的循环执行多次,您将会得到你收到的错误。
您的SQL语句似乎是根据您的列表多次将 Login_Users 中的所有记录的密码设置为某个加密值。如果我理解正确,也许这会做你想要的:
var command = new SqlCommand("update Login_Users set Password=@a where UserName !='" + null + "'", Db);
Db.Open();
command.Parameters.Add(new SqlParameter("@a",null));
for (int i = 0; i < list.Count; i++)
{
cmd.Parameters["@a"].Value = Encrypt(list[i]);
int a = command.ExecuteNonQuery();
}
祝你好运!