每个定时器更新Firebird数据库';s在C#中打勾

本文关键字:定时器 更新 Firebird 数据库 | 更新日期: 2023-09-27 18:28:42

我想在计时器的每一刻更新数据库中的字段:

我知道如何从数据库中读取,但我不知道如何将其发送到数据库。。我的代码:

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();
}

这是更新数据库的好方法吗?我会有很多参数来更新每一个刻度(秒),所以也许还有另一种正确的方法可以做到这一点?

每个定时器更新Firebird数据库';s在C#中打勾

您可以调用.ExecuteNonQuery()方法。您可能会重构命令的名称,因为readCommand有点令人困惑。然后,作为另一个建议,使用参数化查询,因为您显示的代码实际上受到查询注入的约束。你是火鸟,看看这个例子,它似乎正适合你的需要。对于架构部分,我不知道你必须做什么,但不要期望结果在时间上准确得多,而是期望它不那么准确,因为最短的时间是刻度。

更新查询使用的是ExecuteNonQuery而不是ExecuteReader。当您不阅读任何内容时,无需构建DataReader。

还要在连接周围放一个using语句(以确保在出现异常时连接将关闭)
最后,(可能也是最重要的建议),始终使用参数来处理数据库。

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.AddWithValue("@myData", TextBox1.Text);
        int recUpdated = writeCommand.ExecuteNonQuery(); 
    }
}