我有一个MySql Db表。在db列中有一些相同类型的数据。我想为不同类型的数据分配定时器。这些类型的数据具有相同的定时器。例如100,100,100有timer1,102,102,102有timer2我还想更新特定的2列,这个更新将使用那些分配的计时器每秒继续每行。这是我的代码,
void PrepareTimers(List<int> _dataValues)
{
foreach (int dataValue in _dataValues)
{
ThreadingTimer timer = new ThreadingTimer(TimerAction, dataValue, 1000, 0);
}
}
void TimerAction(object flag)
{
string myconstring = "SERVER=localhost;" + "DATABASE=alicosms;" + "UID=root;" + "PASSWORD=;";
MySqlConnection mycon = new MySqlConnection(myconstring);
string u = "UPDATED";
mycon.Open();
MySqlCommand cmd = new MySqlCommand("UPDATE sms_data_bankasia set flag= @flag * 2 , sendingstatus = '" + u + "' WHERE flag = @flag", mycon);
MySqlParameter param = new MySqlParameter();
param.ParameterName = "@flag";
param.Value = flag;
cmd.Parameters.Add(param);
cmd.ExecuteNonQuery();
}
它无法正常工作。最好的方法是什么?任何人都可以帮助我吗?任何帮助都可以很有帮助。
答案 0 :(得分:0)
为了一次只更新一行,您需要在sql查询中添加LIMIT 1
子句。它将限制可以更新的行数。
所以你的SqlCommand
应该是:
MySqlCommand cmd = new MySqlCommand("UPDATE sms_data_bankasia set flag= @flag * 2 , sendingstatus = '" + u + "' WHERE flag = @flag LIMIT 1", mycon);
答案 1 :(得分:0)
我想我发现了我的问题。问题出现在计时器声明中。我设置了0期和到期时间1000.因为这个TimerAction再也没有调用过。而且查询中也有问题。而且我不想工作的原因是什么它应该写成,
ThreadingTimer timer = new ThreadingTimer(TimerAction, dataValue, 0, 1000);