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
相关产品推荐
相关产品推荐

