gpt4 book ai didi

c# - Mono SQLite 无法打开数据库

转载 作者:行者123 更新时间:2023-12-03 17:40:33 25 4
gpt4 key购买 nike

我编写了一个简单的 Mono C# 应用程序,用于使用 Mono.Data.Sqlite 包中的 Mono 实现写入 SQLite 数据库:

using System;
using Mono.Data.Sqlite;

class MainClass
{
public static void Main (string[] args)
{
using (var dbConnection = new SqliteConnection (@"Data Source=/var/log/gmblog;Version=3;"))
{
dbConnection.Open();

string sql = @"INSERT INTO ""queue"" (""data"") VALUES(""Test"")";
using (var insertCommand = new SqliteCommand (sql, dbConnection))
{
insertCommand.ExecuteNonQuery();
}
}
}
}

这工作正常,直到我从另一个应用程序(例如 sqlite3)进行插入并保持该应用程序运行:

sqlite> insert into queue ("data") VALUES("test2");

现在 C# 程序会挂起,直到出现以下错误:

Unhandled Exception: Mono.Data.Sqlite.SqliteException: The database file is locked

sqlite3 的其他实例或我创建的 C++ 应用程序写入表时没有任何问题。

如果我关闭 sqlite3 实例,则 C# 应用程序将再次运行。

执行 lsof/var/log/gmblog 显示 sqlite3 在执行 INSERT 后已获得读取器锁定:

sqlite3 15578  cup    3ur  REG   8,17    13312 4988505 /var/log/gmblog

在 INSERT 之前它没有这个锁:

sqlite3 15578  cup    3u   REG   8,17    13312 4988505 /var/log/gmblog

但正如我所指出的,当其他应用程序使用数据库时,其他应用程序写入表时不会出现任何问题。

对我的 C# 代码有什么问题有什么想法吗?这是 SQLite 的 Mono 实现中的错误吗?

2011 年 25 月更新

请注意,导致数据库锁定错误的是 dbConnection.Open();,而不是 insertCommand.ExecuteNonQuery();。 IE。以下代码也不起作用:

using System;
using Mono.Data.Sqlite;

class MainClass
{
public static void Main (string[] args)
{
using (var dbConnection = new SqliteConnection (@"Data Source=/var/log/gmblog;Version=3;"))
{
dbConnection.Open();
}
}
}

最佳答案

请参阅SQLiteConnection documentation :“如果 SQLiteConnection 超出范围,它不会关闭。因此,您必须通过调用 Close 显式关闭连接。”。该示例显示连接在finally block 中被关闭。我在代码示例中看不到关闭连接的任何地方。

您还应该能够使用“using” block ,当对象超出范围时它会自动调用 close:

using (var dbConnection = new SqliteConnection (@"..."))
{
dbConnection.Open();

string sql = @"INSERT INTO ""queue"" (""data"") VALUES(""Test"")";
using (var insertCommand = new SqliteCommand (sql, dbConnection))
{
insertCommand.ExecuteNonQuery();
}
}

这可以确保所有内容都能正确、及时地发布。

关于c# - Mono SQLite 无法打开数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13531115/

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