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

如何让.NET应用创建SQLite 3.25.0版本数据库?

如何强制创建支持窗口函数的SQLite 3.25.0+版本数据库

嘿,我之前也碰到过类似的问题!你升级了System.Data.SQLite的NuGet包但还是生成3.24.0版本的数据库,其实问题出在底层SQLite核心版本的验证和数据库创建时的参数指定上,下面一步步帮你解决:

1. 先确认你实际在用的SQLite核心版本

首先别光看NuGet包版本,得验证程序实际调用的SQLite核心是不是真的支持窗口函数。3.25.0及以上的核心才支持窗口函数,你可以用这段代码快速查看:

using System.Data.SQLite;

// 打印当前SQLite核心版本
Console.WriteLine($"当前SQLite核心版本: {SQLiteConnection.SQLiteVersion}");

如果输出是3.25.0或更高(比如1.0.110.0对应的核心是3.27.2),那核心是没问题的,问题出在数据库创建参数;如果还是3.24.0,那说明NuGet包没装对——清理项目的bin/obj文件夹,重新安装1.0.110.0版本,确保没有旧的dll残留。

2. 创建数据库时强制指定文件格式版本

SQLite的文件格式版本决定了是否能启用新特性,3.25.0对应的格式版本是4(旧版本是3)。你需要在连接字符串里加参数强制用新格式创建:

// 连接字符串里明确指定文件格式为4,同时推荐启用WAL模式(新格式配合WAL性能更好)
string connStr = @"Data Source=MyNewDB.db;Version=3;Journal Mode=WAL;File Format=4;";

using (var conn = new SQLiteConnection(connStr))
{
    conn.Open();
    // 验证数据库的格式版本
    using (var cmd = new SQLiteCommand("PRAGMA schema_version;", conn))
    {
        var version = cmd.ExecuteScalar();
        Console.WriteLine($"数据库格式版本: {version}"); // 输出4就对了
    }
}

这里的File Format=4会强制生成符合3.25.0+要求的数据库文件。

3. 别让旧数据库拖后腿

如果你之前已经创建过3.24.0版本的MyNewDB.db文件,一定要先删掉它!不然程序会直接打开旧文件,不会重新创建新的。

4. 测试窗口函数是否能用

创建好数据库后,直接跑一段窗口函数的SQL验证一下:

// 先建个测试表
using (var createCmd = new SQLiteCommand("CREATE TABLE IF NOT EXISTS TestTable (Id INT, Value INT);", conn))
{
    createCmd.ExecuteNonQuery();
    // 插入测试数据
    createCmd.CommandText = "INSERT INTO TestTable VALUES (1, 10), (2, 20), (3, 15);";
    createCmd.ExecuteNonQuery();
}

// 执行窗口函数查询
using (var queryCmd = new SQLiteCommand(@"
    SELECT 
        Id, 
        Value,
        ROW_NUMBER() OVER (ORDER BY Value) AS RowNum
    FROM TestTable;", conn))
{
    var reader = queryCmd.ExecuteReader();
    while (reader.Read())
    {
        Console.WriteLine($"Id: {reader["Id"]}, Value: {reader["Value"]}, 行号: {reader["RowNum"]}");
    }
}

如果能正常输出结果,说明窗口函数已经可以用了。

常见坑点排查

  • 还是看到3.24.0版本:检查输出目录里有没有旧的System.Data.SQLite.dll,清理项目缓存后重新编译。
  • 窗口函数报错:确认SQL语法正确,SQLite的窗口函数和标准SQL几乎一致,但少数高级特性(比如复杂的窗口框架)可能不支持。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:26:10