更新System.Data.SQLite.dll后SQLite无效的URI

时间:2012-10-05 07:02:33

标签: c# sqlite system.data.sqlite

我第一次使用这个SQLite版本:1.0.77.0(sqlite-netFx40-static-binary-bundle-Win32-2010-1.0.77.0) 一切都很好。 将我的System.Data.SQLite.dll更新到版本1.0.82.0(sqlite-netFx40-static-binary-bundle-Win32-2010-1.0.82.0)之后我现在收到这个:

无法打开数据库。连接字符串:'datetimeformat = ISO8601; synchronous = Off; uri =“file:// C:/Users/username/Documents/data/test.db”; version = 3; journal mode = Truncate; default isolationlevel = ReadCommitted; pooling =真';错误:'System.InvalidOperationException:无效的连接字符串:无效的URI

我也尝试过file:///而不是file://没有运气。

有人可以告诉我我的URI有什么问题,为什么它在v1.0.82.0中不再起作用但在v1.0.77.0中工作了?

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki (1.0.82.0 == 3.7.14)

5 个答案:

答案 0 :(得分:2)

获取正确连接字符串的最佳方法是始终使用SQLiteConnectionStringBuilder类来生成它们。

SQLiteConnectionStringBuilder conn_builder = new SQLiteConnectionStringBuilder 
{ 
   DateTimeFormat = SQLiteDateFormats.ISO8601,
   SyncMode = SynchronizationModes.Off,
   Version = 3,
   JournalMode = SQLiteJournalModeEnum.Truncate,
   DefaultIsolationLevel = System.Data.IsolationLevel.ReadCommitted,
   Pooling = true,
   Uri = new Uri(@"c:\tmp\db.sqlite").AbsoluteUri
 };
 string conn_str = conn_builder.ConnectionString;

如果Uri无效,请尝试设置DataSource(如果您使用的是本地文件)。

快速检查显示DataSourceSQLiteConnection.cs之前评估Uri并优先于Uri,因此如果{{1}}处理中存在错误,请使用DataSource可能有助于绕过它。

答案 1 :(得分:2)

根据版本1.0.82.0开始的docs,它已被更改:

  

通过新的FullUri连接字符串添加对URI文件名的支持   属性。

示例:

var connection = new SQLiteConnection("FullUri=file:mydb.sqlite?cache=shared");

答案 2 :(得分:1)

以下作品对我来说,对于以下示例,您无法使用数据源

FullUri=file::memory:?cache=shared

答案 3 :(得分:0)

我认为您应该尝试将连接字符串拆分为基础知识,然后添加选项。

请查看此站点,例如SQLite连接字符串选项。

http://www.connectionstrings.com/sqlite

3 ///仅在你试图逃出uri中的空格时有效,我还会说你应该尝试将db从users文件夹移到c:\上的根目录,以防万一访问权限对于访问数据库无效,这也意味着您可以尝试使用更简单的连接字符串。

祝你好运

答案 4 :(得分:0)

请参阅these URI filename examples,但您的URI(带有三个斜杠)看起来是正确的。