从列表中更新数据库中的列

时间:2016-01-13 13:15:54

标签: c# sql

我正在尝试从列表中更新数据库中的列

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();
}

但是我收到了这个错误:

  

变量名已经被声明

3 个答案:

答案 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)

  1. 在查询中,您有一个名为@a的参数 - 检查您的列表是否只有一个项目。如果不是那个问题。 Meybe最好删除for循环并手动分配所有参数。
  2. 为什么在查询中你会这样做:

      

    其中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();
}
祝你好运!