Использование SQLite, System.Data.SQLite и Dapper (в консольном приложении, а затем Windows Service, высокая пропускная способность); почему «база данных заблокирована», так или иначе?SQLite и «База данных заблокирована»
Я даже абстрагироваться призывающим к БД SQLite в этом методе:
public static void LocalDbScope(Action<IDbConnection> action)
{
try
{
lock (DbLock)
{
using (var connection = Open(LocalStorageConnectionString))
{
action(connection);
}
}
}
catch (Exception xux)
{
ErrLog.Error(xux);
throw;
}
}
Включения отображенных в памяти опции не помог:
connection.Execute("PRAGMA wal_autocheckpoint=32; PRAGMA journal_size_limit = 2048;");
connection.Execute("PRAGMA mmap_size=" + GB);
И это строка соединения:
var builder = new SQLiteConnectionStringBuilder
{
DataSource = storageDbFilePath,
FailIfMissing = false,
PageSize = 32 * KB,
CacheSize = 10 * MB,
ForeignKeys = false,
UseUTF16Encoding = false,
Pooling = true,
JournalMode = SQLiteJournalModeEnum.Wal,
SyncMode = SynchronizationModes.Normal,
DateTimeKind = DateTimeKind.Utc,
DateTimeFormat = SQLiteDateFormats.ISO8601,
DefaultIsolationLevel = IsolationLevel.ReadCommitted,
DefaultTimeout = (int)TimeSpan.FromMinutes(1).TotalMilliseconds
};
LocalStorageConnectionString = builder.ToString();
Что мне здесь не хватает?
Примечание. Когда вы используете Google для «базы данных заблокировано», все верхние результаты (и вся первая страница) относятся к этой проблеме на разных языках программирования и платформах. Кажется, что в SQLite есть что-то еще, что я не могу отфильтровать эту картину.
Понятия не имею, но вместо того, чтобы Dapper, взглянуть на SQLite-сети, и это подключение асинхронной. –
Что делать, если вы пытаетесь сделать его в памяти db. Google, но это было так же просто, как поставить: men: или эквивалент в cnnstring. –
Локальное хранилище необходимо для обеспечения того, чтобы не было потери данных, независимо от того, вставлена или нет основная база данных; даже когда происходят грязные выключения. Для этой цели нельзя использовать резидентную базу данных. –