在C#中每个计时器的刻度更新Firebird DB

时间:2012-03-23 10:00:47

标签: c# sql firebird

我想在计时器的每个滴答中更新我的数据库中的字段:

我知道如何从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(秒),所以也许还有另一种正确的方法可以做到这一点?

2 个答案:

答案 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的线程问题。