0

我将同时运行多个进程,所以我在这里尝试做的是获取 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列..

我究竟做错了什么?

4

1 回答 1

0

为什么不能只创建一个单独的列,甚至是一个表?然后在SQL级别写一个基本的Query或者一个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);

像这样的简单查询不能解决您的问题吗?

如果我的回答不清楚……我会试着澄清我的思考过程。

于 2013-01-17T23:21:04.733 回答