3

我首先有这个 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;defaultisolationlevel=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)

4

5 回答 5

4

获得正确连接字符串的最佳方法是始终使用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之前UriSQLiteConnection.cs中评估并优先于它,因此如果Uri处理中存在错误,使用 DataSource 可能有助于绕过它。

于 2012-10-05T08:51:05.137 回答
2

根据从版本 1.0.82.0 开始的文档,它已更改

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

例子:

var connection = new SQLiteConnection("FullUri=file:mydb.sqlite?cache=shared");
于 2016-10-14T20:59:32.883 回答
1

以下对我有用,对于以下示例,您不能不使用数据源

FullUri=file::memory:?cache=shared
于 2013-10-30T04:54:55.863 回答
0

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

看看这个站点,例如 SQLite 连接字符串选项。

http://www.connectionstrings.com/sqlite

3 /// 仅在您尝试转义 uri 中的空格时才有效,我还要说您应该尝试将 db 从用户文件夹移到 c:\ 上的根目录,以防访问权限为它无法访问数据库,这也意味着您可以尝试更简单的连接字符串。

祝你好运

于 2012-10-05T07:21:04.907 回答
0

请参阅这些 URI 文件名示例,但您的 URI(带有三个斜杠)看起来是正确的。

于 2012-10-05T07:22:20.403 回答