链式 CURD 操作
本文档详细介绍 cDataBase 类的链式查询构建器,提供类似 ORM 的优雅 API,无需手写复杂 SQL。
详细文档
| 主题 | 说明 |
|---|---|
| 条件方法 | Where, OrWhere, WhereIn, WhereLike, WhereNull 等 |
| 排序/分组/连接/选择 | OrderBy, GroupBy, Having, Join, Columns, Distinct |
| 限制与分页 | Limit, Offset, Page |
| 终结方法 | RowCreate, RowRead, RowUpdate, RowDelete, Field |
| 聚合终结方法 | RowCount, RowExists, RowPluck, RowMax/Min/Sum/Avg |
| 综合示例与最佳实践 | 实战示例、与传统SQL对比、FAQ、最佳实践 |
概述
什么是链式 CURD
链式 CURD 是 cDataBase 类提供的一种优雅的数据库操作方式,通过方法链(Method Chaining)逐步构建 SQL 语句,最终以终结方法执行操作。
核心优势:
- 代码可读性高 - 每个链式方法对应一个 SQL 子句,语义清晰
- 类型安全 - 方法参数自动转义,减少 SQL 注入风险
- 跨数据库兼容 - 自动适配 MySQL / SQL Server / Access 的语法差异
- 零手写 SQL - 排序、分组、分页、JOIN 等常用操作无需拼接字符串
设计理念
链式调用流程:
起始方法 → 条件方法(可叠加) → 修饰方法(可叠加) → 终结方法
───────── ─────────────── ─────────────── ──────────
Table() Where() Columns() RowRead
WhereIn() OrderBy() RowCreate
WhereLike() GroupBy() RowUpdate
OrWhere() Join() RowDelete
... Limit() RowCount
Page() RowExists
RowPluck
RowMax/Min/Sum/Avg链式构建器架构
内部状态变量
链式构建器通过一组私有变量累积各子句,终结方法执行后自动重置(ResetBuilder):
| 变量 | 对应 SQL 子句 | 设置方法 |
|---|---|---|
pvTableName | FROM | Table() |
pvSelectFields | SELECT 列列表 | Columns() |
pvIsDistinct | SELECT DISTINCT | Distinct() |
pvWhereCondition | WHERE (AND 条件) | Where(), WhereLike() |
pvOrWhereCondition | WHERE (OR 条件) | OrWhere() |
pvWhereInClauses | WHERE IN/NOT IN | WhereIn(), WhereNotIn() |
pvWhereBetweenClauses | WHERE BETWEEN | WhereBetween() |
pvWhereNullClauses | WHERE IS NULL | WhereNull(), WhereNotNull() |
pvOrderByClause | ORDER BY | OrderBy(), OrderByDesc(), OrderByRaw() |
pvGroupByClause | GROUP BY | GroupBy() |
pvHavingClause | HAVING | Having() |
pvJoinClauses | JOIN | Join(), LeftJoin(), RightJoin() |
pvLimitValue | LIMIT | Limit() |
pvOffsetValue | OFFSET | Offset() |
pvPageNum/Limit | ADO 分页 | Page() |
pvFields | INSERT/UPDATE 值 | Field() |
SQL 拼接逻辑
终结方法调用 BuildSelectSql() 拼接完整 SQL:
sql
SELECT [DISTINCT] {字段} FROM {表名} {JOIN子句}
WHERE {Where + WhereIn + WhereBetween + WhereNull} [OR (OrWhere)]
GROUP BY {分组} HAVING {过滤}
ORDER BY {排序}
LIMIT/OFFSET 或 ADO 分页起始方法
Table - 设置操作表
设置当前操作的表名,所有链式 CURD 操作的起点。
语法
vb
Function Table(ByVal TableName As String) As cDataBase示例
vb
' 基本用法
db.Table("users").RowRead
' 配合 Where 查询
db.Table("users").Where("age>?", 18).RowRead
' 配合 Field 插入
db.Table("users").Field("name", "张三").Field("age", 25).RowCreate完整方法速查表
链式方法(返回 cDataBase,可继续链式调用)
| 类别 | 方法 | 说明 | 对应 SQL 子句 |
|---|---|---|---|
| 起始 | Table(表名) | 设置操作表 | FROM |
| 条件 | Where(条件,参数...) | AND 条件 | WHERE |
OrWhere(条件,参数...) | OR 条件 | WHERE ... OR (...) | |
WhereIn(字段,值列表) | IN 条件 | WHERE 字段 IN (...) | |
WhereNotIn(字段,值列表) | NOT IN 条件 | WHERE 字段 NOT IN (...) | |
WhereBetween(字段,V1,V2) | BETWEEN 条件 | WHERE 字段 BETWEEN V1 AND V2 | |
WhereNotBetween(字段,V1,V2) | NOT BETWEEN | WHERE 字段 NOT BETWEEN ... | |
WhereLike(字段,模式) | LIKE 模糊匹配 | WHERE 字段 LIKE '模式' | |
WhereNotLike(字段,模式) | NOT LIKE | WHERE 字段 NOT LIKE '模式' | |
WhereNull(字段) | IS NULL | WHERE 字段 IS NULL | |
WhereNotNull(字段) | IS NOT NULL | WHERE 字段 IS NOT NULL | |
| 排序 | OrderBy(字段) | ASC 排序 | ORDER BY 字段 ASC |
OrderByDesc(字段) | DESC 排序 | ORDER BY 字段 DESC | |
OrderByRaw(子句) | 自定义排序 | ORDER BY 子句 | |
| 分组 | GroupBy(字段) | 分组 | GROUP BY 字段 |
Having(条件) | 分组过滤 | HAVING 条件 | |
| 连接 | Join(表,ON条件) | INNER JOIN | INNER JOIN 表 ON 条件 |
LeftJoin(表,ON条件) | LEFT JOIN | LEFT JOIN 表 ON 条件 | |
RightJoin(表,ON条件) | RIGHT JOIN | RIGHT JOIN 表 ON 条件 | |
| 选择 | Columns(列...) | 指定查询列 | SELECT 列 |
Distinct() | 去重 | SELECT DISTINCT | |
| 值 | Field(字段,值) | 设置字段值 | INSERT/UPDATE 值 |
| 限制 | Limit(N) | 限制条数 | LIMIT N |
Offset(N) | 偏移量 | OFFSET N | |
Page(页码,每页数) | ADO分页 | Rs.PageSize + AbsolutePage |
终结方法(执行操作,重置构建器)
| 方法 | 返回值 | 说明 |
|---|---|---|
RowCreate | cDataBase | 创建新行 |
RowRead | cDataBase | 查询行(结果在 Rs) |
RowUpdate | cDataBase | 更新行 |
RowDelete | cDataBase | 删除行 |
RowCount | Long | 统计行数 |
RowExists | Boolean | 判断是否存在 |
RowPluck(字段) | Collection | 提取单列值列表 |
RowMax(字段) | Variant | 聚合 MAX |
RowMin(字段) | Variant | 聚合 MIN |
RowSum(字段) | Variant | 聚合 SUM |
RowAvg(字段) | Variant | 聚合 AVG |
最后更新: 2026-06-26