Я пытался создать разделяемую базу данных в памяти в соответствии с документацией, представленной на сайте SQLite.Но в итоге я нахожу решение проблемы.
var connectionString = "Data Source=sharedmemdb;Mode=Memory;Cache=Shared";
using (var connection1 = new SQLiteConnection(connectionString))
{
connection1.Open();
var command1 = connection1.CreateCommand();
command1.CommandText =
"CREATE TABLE Message ( Text TEXT );" +
"INSERT INTO Message ( Text ) VALUES ( 'Is there anybody out there?' );";
command1.ExecuteNonQuery();
using (var connection2 = new SQLiteConnection(connectionString))
{
connection2.Open();
var command2 = connection2.CreateCommand();
command2.CommandText = "SELECT Text FROM Message;";
var message = command2.ExecuteScalar() as string;
}
}
Если я выполню этот код, он создаст в памяти БД с именем sharedmemdb, и общий кэш будет включен при создании соединения, поэтому это соединение доступнок другим соединениям также.Если я запускаю этот первый раз, это работает довольно хорошо, но если я закрываю приложение и запускаю снова, он выдает ошибку «Сообщение таблицы уже существует», и это выглядит очень странно, так как я создал таблицу в памяти, и это не должно быть доступно, если приложение перезапускается.
После получения этой ошибки я заглянул в каталог приложения и обнаружил файл «sharedmemdb», который означает, что SQLite не создает разделяемую базу данных в памяти.
Любая подсказка, почему это происходит.?
После перемещения команды в блок using
:
var connectionString = "Data Source =sharedmemdb; Mode = Memory; Cache = Shared";
using (var connection1 = new SQLiteConnection(connectionString))
{
connection1.Open();
using (var command1 = connection1.CreateCommand())
{
command1.CommandText =
"CREATE TABLE Message ( Text TEXT );" +
"INSERT INTO Message ( Text ) VALUES ( 'Is there anybody out there?' );";
command1.ExecuteNonQuery();
}
using (var connection2 = new SQLiteConnection(connectionString))
{
connection2.Open();
using (var command2 = connection2.CreateCommand())
{
command2.CommandText = "SELECT Text FROM Message;";
var message = command2.ExecuteScalar() as string;
}
}
}