You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 3.1中无法打开SqliteConnection的问题求助

解决ASP.NET Core 3.1中SQLite连接的两个问题:空引用与不支持Version关键字

我来帮你一步步梳理并解决这两个问题:

首先:SQLite连接字符串不支持Version关键字

你遇到的"不支持该关键字"错误是正常的——SQLite的连接字符串规范里根本没有Version这个参数,直接去掉它就好。SQLite会自动使用当前加载的本地SQLite库版本,完全不需要手动指定。

然后:ServerVersion为null的空引用问题

这个问题的核心原因是:SqliteConnection的ServerVersion属性只有在连接成功打开后才会被赋值,连接打开前它就是null。如果你的代码里有逻辑在connection.Open()之前读取了这个属性,就会触发空引用异常。

修正后的代码示例

我调整了你的代码,用更可靠的绝对路径避免相对路径的不确定性,同时确保只在连接打开后访问ServerVersion:

// 用应用基目录构建绝对路径,确保数据库文件位置符合预期
var dbPath = Path.Combine(AppContext.BaseDirectory, "MyTestDB.db");

var connectionStringBuilder = new SqliteConnectionStringBuilder
{
    DataSource = dbPath,
    Mode = SqliteOpenMode.ReadWriteCreate,
    Password = "Toto"
};

using (var connection = new SqliteConnection(connectionStringBuilder.ToString()))
{
    connection.Open();
    // 只有连接打开后才能安全访问ServerVersion
    var sqliteVersion = connection.ServerVersion;
    Console.WriteLine($"当前SQLite版本:{sqliteVersion}");
}

额外注意(如果搭配EF Core使用)

如果你是通过EF Core操作SQLite,不要在UseSqlite方法里手动指定ServerVersion——EF Core 3.1的SQLite提供商会自动处理版本检测,手动传入null或错误值反而会引发空引用。正确的配置方式是:

services.AddDbContext<YourDbContext>(options =>
    options.UseSqlite(connectionString));

最后检查NuGet包版本

确保你安装的Microsoft.Data.Sqlite.Core包版本和ASP.NET Core 3.1的主版本一致(比如3.1.x系列的最新补丁版),跨版本使用可能会引发兼容性问题。

内容的提问来源于stack exchange,提问作者AdrienM87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:17:30