2.0版中,这个不能用了运行子程序(创建SQLite数据库文件)失败。编译失败, Compilation, (13,19): error CS0234: 命名空间“System.Data”中不存在类型或命名空间名“SQLite”(是否缺少程序集引用?)(32,5): error CS0103: 当前上下文中不存在名称“SQLiteConnection”
2.0换了个库,用的不是这个库了
结论:该子程序只需把旧的 System.Data.SQLite 改为 Quicker 2.0 使用的 Microsoft.Data.Sqlite。不能只替换类型名,因为新库没有 SQLiteConnection.CreateFile();应通过打开 ReadWriteCreate 连接创建数据库。
System.Data.SQLite
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(); }
注意:
System.Data.SQLite.dll
Pooling = false
Version=3
SqliteConnectionStringBuilder
原子程序确实只有一个 C# 步骤,引用 System.Data.SQLite 并调用 SQLiteConnection.CreateFile(path);分享页的 2.0 报错也正是命名空间和类型不存在:原子程序、报错讨论。
SQLiteConnection.CreateFile(path)
当前 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 连接字符串。
Microsoft.Data.Sqlite.Core
SQLitePCL.Batteries_V2.Init()
更长期稳定的做法,是把 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# 替换最直接。
{path}
PRAGMA user_version;
2.0换了个库,用的不是这个库了