.NET Core SQLite «база данных заблокирована» только в Linux - PullRequest
0 голосов
/ 19 февраля 2019

У меня вопрос, у меня есть небольшая программа, которая извлекает файл CSV и преобразует его в базу данных Sqlite.На Windows нет проблем, это работает очень хорошо.В Linux, однако, я получаю сообщение об ошибке:

string connectionString = "Data Source=" + PathFile + targetFile;
using (SqliteConnection m_dbConnection = new SqliteConnection(connectionString))
{
    m_dbConnection.Open();
    // Requêtes de création des tables
    string sql = String.Empty;
    sql = String.Concat(sql, "CREATE TABLE TARGETS (idTarget NUMERIC, customerId NUMERIC, numberCard TEXT, mail TEXT, mobile TEXT, bat NUMERIC);");
    sql = String.Concat(sql, "CREATE TABLE COLUMNS (idColumn  NUMERIC, name TEXT, isVariable NUMERIC);");
    sql = String.Concat(sql, "CREATE TABLE ROW (idTarget  NUMERIC, idColumn TEXT, value TEXT);");
    // Execution des requêtes de création
    using (SqliteCommand command = new SqliteCommand(sql, m_dbConnection))
    {
         countRow += command.ExecuteNonQuery(); // <===== /!\ Exception here
    }
}

Unhandled Exception: Microsoft.Data.Sqlite.SqliteException: SQLite Error 5: 'database is locked'. at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior) at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery() at Mailing.Service.ServiceFile.ConvertCSVToSQLite(String sourceFile, String targetFile) at Mailing.Service.ServiceFile.UploadFile(Byte[] byteFile, String filename, TypeCanal canal, Int32 idMailing, Boolean async) at MailingAutomator.Program.Main(String[] args) in Program.cs:line 64

Есть ли что-то другое между Linux и Windows для Microsoft.Data.Sqlite?А связь с тем, что в Linux я читаю и пишу на смонтированном NAS?Проблема доступа?База данных sqlite создана, но пуста.

.NET Core 2.2 Microsoft.Data.Sqlite Ubuntu 16.04

Редактировать: Некоторые новости: Когда я использую общий ресурс Samba на другом сервере Ubuntu, это работает, нона другом ресурсе Windows я снова получаю эту ошибку ... файл журнала появляется и исчезает несколько раз.Я не понимаю, файл sqlite создан, но пустой

1 Ответ

0 голосов
/ 19 февраля 2019

Нет проблем с моим кодом.Я решил свою проблему, добавив nobrl к моей команде монтирования, и она работает.

nobrl : Do not send byte range lock requests to the server. This is necessary for certain applications that break with cifs style mandatory byte range locks (and most cifs servers do not yet support requesting advisory byte range locks).
...