2.0版中,这个不能用了

BUG反馈 · 245 次浏览
韩道友 创建于 2026-06-27 19:41

2.0版中,这个不能用了

运行子程序(创建SQLite数据库文件)失败。编译失败, Compilation, (13,19): error CS0234: 命名空间“System.Data”中不存在类型或命名空间名“SQLite”(是否缺少程序集引用?)
(32,5): error CS0103: 当前上下文中不存在名称“SQLiteConnection”


li1qqq 2026-07-20 10:14 :

2.0换了个库,用的不是这个库了

回复内容
CL 2天23小时前
#1

结论:该子程序只需把旧的 System.Data.SQLite 改为 Quicker 2.0 使用的 Microsoft.Data.Sqlite。不能只替换类型名,因为新库没有 SQLiteConnection.CreateFile();应通过打开 ReadWriteCreate 连接创建数据库。

把子程序中“运行 C# 代码”的全部内容替换为:

using Microsoft.Data.Sqlite;

// Quicker 将会调用的函数
public static void Exec(Quicker.Public.IStepContext context)
{
    var path = (string)context.GetVarValue("path");

    if (System.IO.File.Exists(path))
    {
        throw new InvalidOperationException("文件已存在!");
    }

    // Quicker 2.0 使用 Microsoft.Data.Sqlite.Core,
    // 需要确保内置 SQLite provider 已初始化。
    SQLitePCL.Batteries_V2.Init();

    var connectionString = new SqliteConnectionStringBuilder
    {
        DataSource = path,
        Mode = SqliteOpenMode.ReadWriteCreate,
        Pooling = false
    }.ToString();

    using var connection = new SqliteConnection(connectionString);
    connection.Open();
}

注意:

  • “引用 DLL 库”保持空白即可,不要再引用 System.Data.SQLite.dll
  • Pooling = false 可以避免这个仅用于建库的连接继续占用文件。
  • 父目录必须已经存在,这与原子程序行为一致。
  • 已存在的文件仍会抛出“文件已存在”,保持原语义。
  • 不要再添加旧连接串中的 Version=3Microsoft.Data.Sqlite 不需要它。
  • SqliteConnectionStringBuilder 能正确处理路径中的分号等特殊字符。

原子程序确实只有一个 C# 步骤,引用 System.Data.SQLite 并调用 SQLiteConnection.CreateFile(path);分享页的 2.0 报错也正是命名空间和类型不存在:原子程序报错讨论

当前 Quicker 2.0 已统一使用 Microsoft.Data.Sqlite.Core,内部也通过 SQLitePCL.Batteries_V2.Init() 初始化 provider,见 [MicrosoftSqliteConnectionFactory.cs (line 46)](D:/Work/Quicker/QuickerPc/Quicker/Application/Data/Storage/MicrosoftSqliteConnectionFactory.cs:46)。微软文档确认 ReadWriteCreate 会在打开连接时创建不存在的数据库文件:Microsoft.Data.Sqlite 连接字符串

更长期稳定的做法,是把 C# 步骤改成内置“数据库查询”模块,SQLite 连接填 {path},执行 PRAGMA user_version;;该模块已经走 Quicker 2.0 的统一 SQLite 工厂,见 [DatabaseOperationStepV2.Execute.cs (line 216)](D:/Work/Quicker/QuickerPc/Quicker/Actions/XActions/BuildinRunners/Tables/DatabaseOperationStepV2.Execute.cs:216)。不过若要完整保留“文件已存在时主动报错”,上面的 C# 替换最直接。

回复主贴