C# Can';t以只读模式打开Sqlite数据库

C# Can';t以只读模式打开Sqlite数据库,c#,.net,sqlite,mono,xamarin.ios,C#,.net,Sqlite,Mono,Xamarin.ios,我有一个Sqlite数据库,包括在我的MonoTouch应用程序中。到目前为止,它对我来说运行良好,但现在我想以只读模式而不是读写模式打开它 因此,我已将连接字符串更改为包含“Read Only=True”,但在调用Open()时,出现以下错误: Library used incorrectly (at Mono.Data.Sqlite3.Open) 如果我深入研究这个异常,就会发现 _errorCode = Misuse 这就是它提供的所有信息 代码如下: var _conn = new

我有一个Sqlite数据库,包括在我的MonoTouch应用程序中。到目前为止,它对我来说运行良好,但现在我想以只读模式而不是读写模式打开它

因此,我已将连接字符串更改为包含“Read Only=True”,但在调用Open()时,出现以下错误:

Library used incorrectly (at Mono.Data.Sqlite3.Open)
如果我深入研究这个异常,就会发现

_errorCode = Misuse
这就是它提供的所有信息

代码如下:

var _conn = new SqliteConnection("Data Source=db/sampleDb;Read Only=True");
_conn.Open ();
你试过了吗

var _conn = new SqliteConnection("Data Source=db/sampleDb;mode=ro");

你的代码是正确的,我只是尝试了一下(没有使用MonoTouch),它对我很有效

您是否有最新版本的
System.Data.SQLite.dll

如果是,那么可能是与MonoTouch相关的问题。

您在
Mono.Data.Sqlite.dll
中发现了一个bug

在解析和设置
只读
标志之前,会附加
创建
标志(默认情况下)。结果标志无效,sqlite报告错误

我将在将来的版本(Mono和MonoTouch…)中修复此问题。如果这阻止了您,请在上打开一个错误报告,我将在错误报告中附加一个固定程序集(带有替换现有程序集的说明)。

这对我有效(aspnet core):


非常有用的了解,非常感谢。我并没有完全被它阻止,但我想打开一个bug来跟踪状态-现在就这样做。如果这对人们有用,下面是我提出的bug的链接:
var _conn = new SqliteConnection("Data Source=db/sampleDb;mode=ReadOnly");