Обновление Firebird DB каждый тик таймер в C # - PullRequest
0 голосов
/ 23 марта 2012

Я хотел бы обновлять поле в моей БД каждый тик таймера:

Я знаю, как читать из БД, но я не знаю, как отправить его в БД .. Мой код:

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

        }

И это хороший способ обновить мою базу данных?У меня будет много параметров для обновления каждого тика (секунды), так что, возможно, есть другой правильный способ сделать это?

Ответы [ 2 ]

3 голосов
/ 23 марта 2012

Вы можете вызвать метод .ExecuteNonQuery () . Вы, вероятно, будете рефакторировать имя команды, так как readCommand немного сбивает с толку. Затем, в качестве другого предложения, используйте параметризованные запросы, так как код, который вы показываете, действительно подвергается Инъекции запросов . Вы используете Firebird, посмотрите на этот пример , который, кажется, соответствует вашим потребностям. Что касается архитектурной части, я не знаю точно, что вы должны делать, но не ожидайте, что результат будет очень точным, ожидайте, что он будет менее точным, так как самый короткий тик.

1 голос
/ 23 марта 2012

Вы читаете, чтобы обновить изменение до ExecuteNonQuery.
Поместите оператор 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.Add("@myData", TextBox1.Text);
        writeCommand.ExecuteNonQuery(); 
    }
} 

В этом ответе предполагается, что ваш таймер является таймером Windows, а не System.Timer.
Пожалуйста, отметьте это ... если это System.Timer, вы получите проблемы с потоками при доступе к TextBox.

...