gpt4 book ai didi

c# - SQLite 正在为内存数据库创建磁盘文件

转载 作者:行者123 更新时间:2023-11-30 20:26:05 25 4
gpt4 key购买 nike

我尝试根据 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 block 后:

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;
}
}
}

最佳答案

System.Data.SQLite 不支持“模式”参数(即 Microsoft.Data.Sqlite)。

但是,在 System.Data.SQLite 中,您可以使用“FullUri”参数将参数直接传递给 SQLite,这样您就可以通过将连接字符串更改为来实现您想要的效果

FullUri=file:mem.db?mode=memory&cache=shared
Protocol^ ^ ^ ^
DB Name -----| | |
Use memory mode ----+ |
Use shared cache ---------------+

(第一行是实际的连接字符串,接下来的几行将其分解)

关于c# - SQLite 正在为内存数据库创建磁盘文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50551624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com