本文将介绍在 C# 6+ 支持下,使用 SQL 进行“参数化查询”的简化访问原理。
完整实现访问 GitHub:
SQLib:快速编写参数化SQL查询github.com![a5bcb66159e6bd0c2c19b936aaab0ca4.png](https://img-blog.csdnimg.cn/img_convert/a5bcb66159e6bd0c2c19b936aaab0ca4.png)
发布版本通过 NuGet 安装使用:
SQLib:快速编写参数化SQL查询www.nuget.org通常,在编写基于 SQL 访问数据库的应用程序设计时,需要使用这些对象:
- DbConnection:创建数据库连接;
- DbCommand:创建对数据源执行的 SQL 语句或存储过程;
- DbParameter:(可选)创建用于 DbCommand 的参数;
- DbDataReader:(可选)从数据源读取数据。
访问数据库的一般过程:
- 创建 DbConnection,打开数据库连接;
- 创建 DbCommand,编写 SQL 语句并执行;
- 如果 SQL 语句包括传入值部分,应该配合使用 DbParameter 创建参数化查询;
- 如果需要读取数据,则通过 DbDataReader 进行读取;
- 关闭数据库连接。
这个过程如果使用 Sqlite,大约会是这个样子:
- 从表 Regions 中获取指定 RegionId 的 RegionDescription
static
由于使用的是数据库提供程序的基础类型,为了执行这样简单的查询,耗费了不少心思。
其实,对于这个查询,关注点只有以下几个部分:
- 构建 SQL 语句;
- 确认 SQL 语句的参数部分;
- 获取查询结果。
在 C# 6+ 的语言基础上,部分内容是可以智能构建的:
- 使用 using 管理连接创建和释放;
- 使用 FormattableString(字符串插值)自动构建 SQL 语句参数化;
- 使用 Dictionary 更方便地接受查询结果。
管理连接创建和释放
使用 using 语法来管理连接创建和释放:对象创建时建立连接,对象销毁时关闭连接:
using
自动构建 SQL 语句参数化
通过解析字符串内插来获取需要参数化的部分,例如:
int
- regionId 就是“参数化变量”;
- regionId 是 int 类型,对应 DbType.Int32;
- regionId 值为 1。
使用更方便地数据结构来接受查询结果
使用 Dictionary 作为查询结果接收器,是为了使用 [ ] 操作符来简化字段访问:
var
回到上面的例子,使用新的方法来获取数据:
1、创建 Scope:
public
2、从表 Regions 中获取指定 RegionId 的 RegionDescription
static
如有建议,欢迎来信!