PCHMI 技术文档

IDbExecutor 各数据库调用示例文档

统一调用格式:using(var db = DB.Executor("数据库类型",连接字符串或文件路径))。
Execute:查询返回 DataTable;增/删/改/DDL 返回 int 受影响行数。
DDL:数据定义语言(建表、删表、修改表结构);DML:数据操纵语言(INSERT/UPDATE/DELETE);DQL:查询语句(SELECT)

统一类型约定(本文档):为避免各库写法混乱,所有示例统一只用两种类型——整数 INTEGER、字符串 TEXT。
· INTEGER:SQLite / PostgreSQL 为原生类型名;MySQL / SQLServer 是 INT 的官方同义词,四库全部直接可用。
· TEXT:四个真实数据库均原生支持;SQLServer 的 TEXT 属遗留(已弃用)类型,能建表能用,但生产环境建议换成 NVARCHAR(MAX)。
· JSON / EXCEL 的简化 SQL 引擎需在内部把 TEXT/INTEGER 归一化为内部 STRING / INT 处理(原文档写 STRING / INT,现统一文档写法为 TEXT / INTEGER)。
整数宽度差异提醒:SQLite 的 INTEGER 为 8 字节(等价 BIGINT,范围 ±9.2×10¹⁸);MySQL / PostgreSQL / SQLServer 的 INTEGER 为 4 字节(范围 ±21 亿)。 本文档示例数值均在此范围内;若某字段可能超过 21 亿,SQLite 用 INTEGER 即可,其余三库请改用 BIGINT。

1. JSON / EXCEL(SQL语法完全一致,仅类型与路径不同)

JSON、EXCEL 使用同一套SQL语法,底层为简化SQL引擎,不支持复杂联表、子查询。

EXCEL 示例

using(var db = DB.Executor("EXCEL", @"D:\db\NEW EXCEL.xlsx"))
{
    // 建表
    db.Execute("CREATE TABLE IF NOT EXISTS Users (Id INTEGER, Name TEXT, Age INTEGER)");
    // 新增
    db.Execute("INSERT INTO Users (Id, Name, Age) VALUES (11, 'AAA', 20)");
    // 修改
    int upd = (int)db.Execute("UPDATE Users SET Age=21 WHERE Id=11");
    // 删除
    int del = (int)db.Execute("DELETE FROM Users WHERE Id=11");
    // 查询
    DataTable dt = (DataTable)db.Execute("SELECT * FROM Users WHERE Age>18");
    dataGridView1.DataSource = dt;
}

JSON 示例

using(var db = DB.Executor("JSON", @"D:\db\app.json"))
{
    // 建表
    db.Execute("CREATE TABLE IF NOT EXISTS Users (Id INTEGER, Name TEXT, Age INTEGER)");
    // 新增
    db.Execute("INSERT INTO Users (Id, Name, Age) VALUES (11, 'AAA', 20)");
    // 修改
    int upd = (int)db.Execute("UPDATE Users SET Age=21 WHERE Id=11");
    // 删除
    int del = (int)db.Execute("DELETE FROM Users WHERE Id=11");
    // 查询
    DataTable dt = (DataTable)db.Execute("SELECT * FROM Users WHERE Age>18");
    dataGridView1.DataSource = dt;
}

2. SQLite

SQLite标准类型:INTEGER、TEXT、REAL;自增主键使用 Id INTEGER PRIMARY KEY AUTOINCREMENT
using(var db = DB.Executor("SQLITE", @"D:\db\app.db"))
{
    // 建表
    db.Execute("CREATE TABLE IF NOT EXISTS Users (Id INTEGER, Name TEXT, Age INTEGER)");
    // 新增
    db.Execute("INSERT INTO Users (Id, Name, Age) VALUES (11, 'AAA', 20)");
    // 修改
    int upd = (int)db.Execute("UPDATE Users SET Age=21 WHERE Id=11");
    // 删除
    int del = (int)db.Execute("DELETE FROM Users WHERE Id=11");
    // 查询
    DataTable dt = (DataTable)db.Execute("SELECT * FROM Users WHERE Age>18");
    dataGridView1.DataSource = dt;
}

3. MySQL

MySQL 中 INTEGER 即 INT 的同义词;TEXT 原生支持(最大 64KB,utf8mb4 下约 16K 字符)。
using(var db = DB.Executor("MYSQL", "Server=127.0.0.1;Port=3306;Database=pchmi;Uid=root;Pwd=123456;"))
{
    // 建表
    db.Execute("CREATE TABLE IF NOT EXISTS Users (Id INTEGER, Name TEXT, Age INTEGER)");
    // 新增
    db.Execute("INSERT INTO Users (Id, Name, Age) VALUES (11, 'AAA', 20)");
    // 修改
    int upd = (int)db.Execute("UPDATE Users SET Age=21 WHERE Id=11");
    // 删除
    int del = (int)db.Execute("DELETE FROM Users WHERE Id=11");
    // 查询
    DataTable dt = (DataTable)db.Execute("SELECT * FROM Users WHERE Age>18");
    dataGridView1.DataSource = dt;
}

4. SqlServer

SqlServer 不支持 CREATE TABLE IF NOT EXISTS,需要用 OBJECT_ID 判断表是否存在。
INTEGER 为 INT 同义词可用;TEXT 属遗留(已弃用)类型,本文档为统一观感保留 TEXT,生产环境建议改用 NVARCHAR(MAX):Name NVARCHAR(MAX)。
using(var db = DB.Executor("SQLSERVER", "Data Source=127.0.0.1;Initial Catalog=pchmi;User ID=sa;Password=123456;TrustServerCertificate=True"))
{
    // 建表(SqlServer兼容写法)
    db.Execute("IF OBJECT_ID('Users','U') IS NULL CREATE TABLE Users (Id INTEGER, Name TEXT, Age INTEGER)");
    // 新增
    db.Execute("INSERT INTO Users (Id, Name, Age) VALUES (11, 'AAA', 20)");
    // 修改
    int upd = (int)db.Execute("UPDATE Users SET Age=21 WHERE Id=11");
    // 删除
    int del = (int)db.Execute("DELETE FROM Users WHERE Id=11");
    // 查询
    DataTable dt = (DataTable)db.Execute("SELECT * FROM Users WHERE Age>18");
    dataGridView1.DataSource = dt;
}

5. PostgreSQL

PostgreSQL:不加双引号标识符自动转小写;禁止手写双引号锁定大小写;INTEGER / TEXT 均为原生类型,无需再区分 INT 与 VARCHAR。
using(var db = DB.Executor("POSTGRESQL", "Host=127.0.0.1;Port=5432;Database=postgres;Username=postgres;Password=123456;Timeout=15"))
{
    // 建表:全部小写,不要双引号
    db.Execute("CREATE TABLE IF NOT EXISTS users (id INTEGER, name TEXT, age INTEGER)");
    // 新增
    db.Execute("INSERT INTO users (id, name, age) VALUES (11, 'AAA', 20)");
    // 修改
    int upd = (int)db.Execute("UPDATE users SET age=21 WHERE id=11");
    // 删除
    int del = (int)db.Execute("DELETE FROM users WHERE id=11");
    // 查询
    DataTable dt = (DataTable)db.Execute("SELECT * FROM users WHERE age>18");
    dataGridView1.DataSource = dt;
}

各数据库关键差异对照表

数据源 类型参数 连接串/路径 表名写法 统一类型(整数/字符串) 重要注意事项
JSON "JSON" 文件路径 任意 INTEGER / TEXT 简化SQL引擎,需内部归一化 STRING/INT
EXCEL "EXCEL" 文件路径 任意 INTEGER / TEXT 简化SQL引擎,需内部归一化 STRING/INT
SQLITE "SQLITE" .db 文件路径 任意 INTEGER / TEXT 类型系统宽松;INTEGER 为 8 字节
MYSQL "MYSQL" 数据库连接串 任意 INTEGER / TEXT INTEGER=INT 同义词;TEXT 最大 64KB
SQLSERVER "SQLSERVER" 数据库连接串 任意 INTEGER / TEXT 无 CREATE TABLE IF NOT EXISTS;TEXT 已弃用,生产用 NVARCHAR(MAX)
POSTGRESQL "POSTGRESQL" 数据库连接串 建议全小写 INTEGER / TEXT 双引号会锁定大小写

两条执行路径区分