C#+ mysql我想选择1000行然后更新那些选定的行

时间:2013-01-17 22:40:39

标签: c# mysql select

我将同时运行多个进程,所以我在这里尝试获取1000行,然后更新我选择的行..下面是我的选择和更新功能通知我之后调用更新功能在select函数中关闭连接

    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列..

我做错了什么?

1 个答案:

答案 0 :(得分:0)

为什么不能只创建一个单独的列,甚至是一个表?然后在SQL级别编写基本查询或修改值的过程?然后其他应用程序可以只测试列或表的值。

示例:

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

像这样的简单查询是否解决了您的问题?

如果我的回答不明确......我会尝试澄清我的思考过程。