【问题标题】:I'm receiving "SQLite Error 14: 'unable to open database file'."我收到“SQLite 错误 14:'无法打开数据库文件'”。
【发布时间】:2020-09-13 22:04:31
【问题描述】:

我正在.NET Framework 4.7.2 上编写一个 ASP.NET Web API。我想在我的硬盘驱动器上的文件中有一个 SQLite 数据库。然后我可以使用 SqliteConnection 访问数据库。

在我的代码中,我调用var db = new SqliteConnection("Data Source=testDB.sqlite"); 来创建SqliteConnection。然后我打电话给db.Open();。此函数引发 Microsoft.Data.Sqlite.SqliteException,其中包含错误“SQLite 错误 14:'无法打开数据库文件'。”

我尝试手动创建 testDB.sqlite 文件,但不确定将其放在哪里。我没有要求 SqliteConnection 创建任何目录。我不是在编写 UWP 应用程序(因为 ASP.NET 与 UWP 不同,对吗?)。我已经尝试过相对路径和绝对路径。我什至删除了整个项目并使用 Visual Studio 项目创建向导重新生成它。我不知道还能尝试什么。

我创建了一个最小的可重现示例here。您应该可以直接将其弹出到 Visual Studio 中。除了管道,这个例子实际上只有 2 行长。有谁知道我做错了什么?

【问题讨论】:

标签: c# asp.net .net sqlite


【解决方案1】:

为您的项目尝试安装依赖项:Microsoft.EntityFrameworkCore.Sqlite 并在您的代码中正确连接字符串,如下所示:

var db = new SqliteConnection("Data Source=file:testDB.sqllite;Mode=ReadWrite;");
db.Open();

Microsoft.Data.Sqlite 使用数据源中的文件名作为 URI: https://www.sqlite.org/c3ref/open.html#urifilenamesinsqlite3open

我用 SQLliteStudio 创建了 sqllite 数据库:https://github.com/pawelsalawa/sqlitestudio/releases

在项目中添加 testDB.sqllite 并设置属性 "Copy to Output directory" :"Copy if newer"。

在这些步骤之后“打开”工作成功

【讨论】:

  • 我稍后再试一下并回复您。谢谢!
【解决方案2】:

就我而言,我不小心混淆了添加到我的解决方案中项目的 Nuget 包的版本。

我在.csproj 中引用了以下内容:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.1"
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.1" />

更新包到:

<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="3.1.10"
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.10" />

在 UWP 项目中为我们解决了这个错误。

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2021-10-15
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多