我想在计时器的每个滴答中更新我的数据库中的字段:
我知道如何从db读取,但我不知道如何将其发送到db ..我的代码:
private void Timer1_tick(object sender, EventArgs e)
{
FbConnection UpdateConnection = new FbConnection(ConnectionString);
UpdateConnection.Open();
FbCommand readCommand = new FbCommand("UPDATE Param SET Test=" + TestTextBox.Text, UpdateConnection);
FbDataReader myreader = readCommand.ExecuteReader();
UpdateConnection.Close();
}
这是更新数据库的好方法吗?我会有很多o参数来更新每个tick(秒),所以也许还有另一种正确的方法可以做到这一点?
答案 0 :(得分:3)
您可以调用.ExecuteNonQuery()方法。您可能会重构命令的名称,因为readCommand
有点令人困惑。然后作为另一个建议,使用参数化查询,因为您显示的代码实际上受Query Injection的约束。您正在使用Firebird,look at this example似乎完全符合您的需求。
对于建筑部分,我不确切地知道你要做什么,但是不要指望结果要花费很多时间准确,期望它不那么准确,因为最短的是滴答声。
答案 1 :(得分:1)
您正在阅读,将更改更新为ExecuteNonQuery
在连接周围添加using
语句(以确保在例外的情况下将关闭连接)
此外,使用always参数来处理数据库。
private void Timer1_tick(object sender, EventArgs e)
{
using(FbConnection UpdateConnection = new FbConnection(ConnectionString))
{
UpdateConnection.Open();
FbCommand writeCommand = new FbCommand("UPDATE Param SET Test=@myData", UpdateConnection);
writeCommand.Parameters.Add("@myData", TextBox1.Text);
writeCommand.ExecuteNonQuery();
}
}
此答案假设您的计时器是Windows计时器,而不是System.Timer 请检查这....如果它是System.Timer,您将获得访问TextBox的线程问题。