我将同时运行多个进程,所以我在这里尝试获取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列..
我做错了什么?
答案 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);
像这样的简单查询是否解决了您的问题?
如果我的回答不明确......我会尝试澄清我的思考过程。