2011-12-22 290 views
6

我有一个包含在我的MonoTouch应用程序中的Sqlite数据库。到目前为止,它对我来说工作得很好,但现在我想以只读模式而不是读写模式打开它。无法以只读模式打开Sqlite数据库

所以我已经改变了连接字符串包括“只读=真正的”,但是当我调用open(),我得到以下错误:

Library used incorrectly (at Mono.Data.Sqlite3.Open) 

如果我钻进去除了它显示

_errorCode = Misuse 

这就是它给出的所有信息。

下面的代码:

var _conn = new SqliteConnection("Data Source=db/sampleDb;Read Only=True"); 
_conn.Open(); 

回答

7

您在Mono.Data.Sqlite.dll中发现了一个错误。

在对ReadOnly标志进行分析和设置之前,会追加Create标志(默认情况下)。结果标志无效,并且sqlite报告错误。

我将为未来版本(Mono和MonoTouch ...)修复此问题。如果这阻止了你,那么请打开一个关于http://bugzilla.xamarin.com的错误报告,然后我将附带一个固定的程序集(带有替换现有程序的说明)到错误报告中。

+0

非常有用的知道,非常感谢。我并没有完全被它阻止,但我想打开一个跟踪状态的错误 - 现在就会这样做。 – vlad259

+0

如果这对人有用,这里是我提出的错误的链接:http://bugzilla.xamarin.com/show_bug.cgi?id=2721 – vlad259

1

你有没有试过?:

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

你的代码是正确的,我只是想它(不使用MonoTouch的),它为我工作。

您有System.Data.SQLite.dll的最新版本吗? 如果是,那么也许这是与MonoTouch相关的问题。