База данных SQLite становится только для чтения - PullRequest
1 голос
/ 30 сентября 2019

У меня есть плагин ac #, который записывает данные в базу данных SQLite в нашем сетевом каталоге. Мы внедряем сервер Panzura в нашем офисе (о котором я мало что знаю). https://panzura.com/solutions-now/aec-solution/

Две недели подряд, около 12:30 - эта база данных Sqlite стала доступна только для чтения. В первый раз статус «только для чтения» был опубликован на выходных. К сожалению, этого не произошло в эти выходные.

, когда я перехожу по коду, я получаю ошибку SQLiteException 'attempt to write to a readonly database'..

Если я использую FileInfo в файле базы данных, 'readonly' атрибут ложный.

Большинство SQL-операторов выглядят следующим образом ...

                    conn.Open();
                    using (SQLiteCommand cmd = new SQLiteCommand(conn))
                    {
                        cmd.CommandText = "INSERT INTO " +
                            "`User`(`UserName`, `UserLevel`) " +
                            "VALUES('" + System.Environment.UserName + "', '0')";
                        cmd.ExecuteNonQuery();
                    }
                    conn.Close();

Мое первое замечание заключается в том, что открытие и закрытие соединения может быть избыточным с помощью оператора using.

Я также заметил этот оператор sql ...

            conn.Open();

            string sel = "SELECT * FROM User WHERE `userName`='"+System.Environment.UserName+"' LIMIT 1";

            using (SQLiteCommand cmd = new SQLiteCommand(sel, conn))
            {
                using (SQLiteDataReader rdr = cmd.ExecuteReader())
                {
                    while (rdr.Read())
                    {
                        NumOfResults++;

                        if (rdr.GetString(2) == "1")
                        {
                            count = 1;
                        } else { count = 0;  }
                    }
                }
            }

В этом случае соединение открыто, используется оператор using, но соединение не закрыто. Интересно (хотя эта маршрутизация выполняется несколько раз в неделю), если это оставляет базу данных в состоянии только для чтения? Хотя я думал, что если оставить соединение открытым, будет возвращено исключение SQLITE BUSY.

На данный момент я не знаю, вызвана ли эта проблема только для чтения моим кодом или сервером. Я запускал этот плагин в течение нескольких месяцев без каких-либо проблем - хотя количество пользователей, обращающихся к нему, увеличивается.

Я не совсем уверен, как решить эту проблему, потому что, как только база данных SQLIte доступна только для чтениясостояние, это не совсем годно к употреблению. Как вывести его из состояния только для чтения?

Я даже не совсем уверен, что сейчас означает состояние только для чтения - файл доступен только для чтения? или в базе данных открыты соединения, которые нужно закрыть?

другая деталь;может ли быть проблема с атрибутом сжатия в строке подключения?

@"Data Source=I:\Practice Standards\BCMS\families.db; Version = 3; New = True; Compress = True; ";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...