【问题标题】:unable to open database file in sqlite (using finisar.sqlite)无法在 sqlite 中打开数据库文件(使用finisar.sqlite)
【发布时间】:2013-07-24 17:34:59
【问题描述】:

我在我的应用程序中使用带有 sqlite.net dll 的 sqlite 数据库。 命名空间是 Finisar.sqlite 我在使用事务向数据库中插入条目时遇到问题,它在打开连接时抛出异常“无法打开数据库文件”。

我用谷歌搜索,但解决方案就像更改连接字符串。如果我遵循该过程,那么 Finisar 会给我异常作为无效参数。

SQLiteConnection db = new SQLiteConnection(f_strConnStr);

db.Open();

**Valid parameters are:** 

Data Source=<database file>  (required)

Version=<version of SQLite (2 or 3)>            (default: 2)

New=True|False                  (default: False)

Compress=True|False                 (default: False)

UTF8Encoding=True|False             (default: False)

UTF16Encoding=True|False            (default: False)

Cache Size=<N>                  (default: 2000)

Synchronous=Full|Normal|Off             (default: Normal)

DateTimeFormat=ISO8601|Ticks|CurrentCulture     (default: ISO8601)

Compatibility=[old-date-format][,old-binary-format] (default: None)

我尝试了池连接字符串、日志模式 = 关闭等解决方案,但对我没有任何效果。由于参数无效,即使我也无法创建受密码保护的文件。

我无法添加除此参数之外的其他参数。 如果有人对此问题有解决方案,请帮助我们。

提前致谢。

【问题讨论】:

  • 确切异常文本是什么?
  • “无法打开数据库文件”这是我从 Exception.message 得到的信息 如果您需要更多信息,我会给您
  • 你可以在另一个可以打开 SQLite 数据库的程序中打开它吗?就像 Firefox 插件一样。
  • 不,我正在对其应用 lock(){ Insert statements}。只有我的应用程序使用该文件。但我有两个应用程序第一个是 Windows 服务,第二个是 Windows 应用程序。我如何知道天气文件正在另一个应用程序中使用。我可以在 sqliteExpert 中打开它

标签: c# sqlite


【解决方案1】:

所以这里可能会出现很多问题:

  1. SQLite 数据库所在的文件夹,您没有写入权限。
  2. 数据库已被另一个 SQLiteConnection 打开。
  3. 连接字符串错误。我认为这不太可能,因为它显然是您从中提取连接字符串的变量,而且我不得不相信其他时候您想要使用相同字符串的数据。

要补救#2,您应该始终像这样访问您的数据:

using (SQLiteConnection c = new SQLiteConnection(f_strConnStr))
{
    c.Open();
    ...
}

【讨论】:

  • 连接字符串为 Data Source= FilePath;Version=3;New=false;Compress=True;
  • @Pratik,正如我在#3 中所说,我怀疑连接字符串是你的问题。您也不太可能没有拥有写入权限。最有可能的嫌疑人是一个SQLiteConnection 对象,因为您没有正确使用它而没有正确处理它。确保您始终处于连接状态(正如我向您展示的那样)并在using 语句中完成您的工作。
  • 有没有办法知道天气sqlite连接已经使用另一个线程或进程打开?
  • @Pratik,是的,带有内存分析器。您将能够看到一个未处理的对象。
  • 好的,谢谢。我正在使用此代码: if (connection != null && connection.State == ConnectionState.Open) { connection.Close(); //connection.Dispose(); } 在 finally 块中。
猜你喜欢
  • 2014-11-11
  • 2014-08-30
  • 1970-01-01
  • 2018-05-15
  • 1970-01-01
  • 2021-10-15
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多