2013-01-17 63 views
0

我將有多個進程同時運行,所以我在這裏試圖做的是獲取1000行,然後更新我選擇的行..下面是我的選擇和更新功能,請注意,我所說的更新功能關閉在選擇功能C#+ mysql我想選擇1000行然後更新那些選定的行

public List<string> Select() 
    { 
     string set; 
     string query = "SELECT * FROM master WHERE attempted='0' LIMIT 1000"; 
     List<string> list = new List<string>(); 
     if (this.OpenConnection() == true) 
     { 
      MySqlCommand cmd = new MySqlCommand(query, connection); 
      MySqlDataReader dataReader = cmd.ExecuteReader(); 
      while (list.Count() < 1000) 
      { 
       dataReader.Read(); 
       string email = dataReader["email"].ToString();    
       var m = dataReader["attempted"]; 
       if (m.ToString() == "0") 
       { 
        list.Add(email); 

       }     
      } 
      dataReader.Close(); 
      this.CloseConnection(); 
      Update(); 
      return list; 
     } 
     else 
     { 
      return list; 
     } 
    } 





    public void Update() 
    { 
     if (this.OpenConnection() == true) 
     { 
       string query = "UPDATE master SET attempted='1' WHERE (SELECT * FROM master WHERE attempted='0' LIMIT 1000)";    
       MySqlCommand cmd = new MySqlCommand(query, connection); 
       cmd.CommandText = query; 
       cmd.ExecuteNonQuery(); 
      this.CloseConnection(); 
     } 
    } 

例外我得到它的操作數必須包含1列(S)連接後的權利..

上午什麼我做錯了?

+3

這可以放在一本書中作爲一個例子「不要這樣做」... –

+0

Andres使用參數化查詢啓動器也爲什麼你不傳遞參數到更新方法這樣你可以更改你的更新主語句更新主設置嘗試='1'其中@EmailAddress =電子郵件和嘗試= 0'類似的東西..你不需要一個SUB在這個特定的UPDATE語句選擇 – MethodMan

+0

當你使用更新查詢你通常將它與你想要改變的價值;然後創建一個子查詢,查找將要更改的所需條件。你的特定方法違背了結構。 – Greg

回答

0

爲什麼你不能創建一個單獨的列,甚至是一個表?然後在SQL級別或一個Procedure上編寫一個基本的查詢來修改該值?然後其他應用程序可以測試列或表的值。

例子:

UPDATE [dbo].[Customer] 
SET [GotEmail] = 1 
WHERE (
     SELECT [Email] 
     FROM [dbo].[Customer] 
     ); 

或者一些基本的東西這樣呢?另一個例子是:

UPDATE accounts 
SET (contact_last_name, contact_first_name) = 
    (SELECT last_name, first_name FROM salesmen 
WHERE salesmen.id = accounts.sales_id); 

做一個簡單的查詢就像這樣不能解決您的問題?

如果我的回答不清楚......我會試着澄清我的思維過程。