c # + sqlite, ошибка: соединение было закрыто, оператор был прерван - PullRequest
1 голос
/ 03 марта 2020

sqlite, насколько близко база данных соединений

            try
            {
                Global.sqliteConnection.Close();
                Global.sqliteReader.Close();
            }
            catch
            {

            }

enter image description here

ошибка: соединение было закрыто, оператор был прерван

1 Ответ

0 голосов
/ 03 марта 2020

Проверьте следующий пример

string cs = @"URI=file:C:\somefile.db";

using(con = new SQLiteConnection(cs)) {
    con.Open();
    string stm = "SELECT * FROM tTable";
    using(cmd = new SQLiteCommand(stm, con)) {
        using(SQLiteDataReader rdr = cmd.ExecuteReader()) {
            while (rdr.Read())
            {
                // Write the first one
                Console.WriteLine($"{rdr.GetInt32(0)}");
            }
        }
    }
}

Используя ключевое слово using, мы гарантируем, что выполняются все функции очистки (не только близкие).

Используя using ключевое слово, мы гарантируем, что мы очищаем ресурсы в правильном порядке. В вашем случае вы сначала закрываете соединение, а затем читаете. В приведенном выше примере происходит обратное.

Вы также должны создавать новое соединение каждый раз, когда выполняете запрос. Не беспокойтесь, это не влияет на производительность, это так, как и должно быть (для получения дополнительной информации проверьте пул соединений).

Прекратите использовать глобальную переменную соединения и просто используйте new Keyword

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...