我第一次使用这个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)
答案 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
(如果您使用的是本地文件)。
快速检查显示DataSource
在SQLiteConnection.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(带有三个斜杠)看起来是正确的。