2016-01-13 46 views
-2

我試圖更新數據庫中的列,從列表中更新數據庫中的一列,從列表中

command = new SqlCommand("update Login_Users set [email protected] 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(); 
} 

,但我得到這個錯誤:

variable name already been declared

回答

1

你的命令只有一個參數,但你試圖一個新的通過每個循環(通過AddWithValue ... 與值)。

要麼將​​command聲明放入循環中(如下所示),要麼使用其他方法之一更新該值。

Db.Open(); 
for (int i = 0; i < list.Count; i++) 
{ 
    command = new SqlCommand("update Login_Users set [email protected] where UserName !='" + null + "'", Db); 
    list[i] = Encrypt(list[i]); 
    command.Parameters.AddWithValue("@a",list[i]); 
    int a = command.ExecuteNonQuery(); 
} 
+0

@SonerGönül會不會是一個替代?如果每次迭代創建一個新的'command',都不需要清除? –

+0

不是'command = new SqlCommand ...'它將是一個帶有空'Parameters'集合的新命令對象。 – gmiley

+0

你能幫我一個例子,因爲我試圖添加一個數組而不是= @ a,但它沒有奏效。 – user1406500

0
  1. 在查詢中有一個名爲@a一個參數 - 檢查你的列表中只有一個項目。如果不是這個問題。 Meybe最好刪除for循環並手動分配所有參數。
  2. 爲什麼在查詢你做這樣的事情:

    where UserName !='" + null + "'"

    我認爲更具有可讀性是這樣的:

    where UserName !=''

    where UserName <>''

0

你必須設置您的SqlCommand包含一個包含參數的SQL語句。使用該設置,在將參數@a設置爲不同的值後,您可以通過ExecuteQuery多次調用該命令。

在您的for循環中,語句command.Parameters.AddWithValue()可能將命令的附加參數添加到該命令中,但沒有兩個參數可以具有相同的值,因此如果您的循環多次執行,則會收到您收到的錯誤。

您的SQL語句似乎是根據您的列表多次將某些加密值的所有記錄的密碼設置爲Login_Users。如果我理解正確,也許這會做你想做的事:

var command = new SqlCommand("update Login_Users set [email protected] 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(); 
} 

祝你好運!

相關問題