前几天刚把放到Github上的开源程序发布到开源中国,没想到很快就有网站联系说希望收录这款软件,于是重新整理了下帮助文档,文档比较简单,以后有空再完善。
一、简介
SqlContext是一个轻量级的Sql帮助类,旨在提供一种快速、简洁、优雅地数据库访问方法。
相比于重量级的EntityFramework,SqlContext非常轻量化,包括空行和注释,代码也不过几百行;而相对于ADO.Net,SqlContext又非常简洁、灵活和优雅,你可以以一种直观的方式来访问数据库,而不必关心其实现的细节。本质上,SqlContext是对ADO.Net的封装,ADO.Net能做的事情SqlContext都能做到。
SqlContext的基本功能:
- 支持任意SQL
- 支持事务
- 支持简单的ORM
- 支持多种数据库
- 自动管理连接,支持长连接和短连接
项目地址:https://github.com/killf/SqlContext
二、常用操作
1.CreateTable
SqlContext是基于连接的,在使用SqlContext之前必须先创建数据库连接,本文以SQLite数据库为例介绍SqlContext的使用方法。
1 | var conn = new SQLiteConnection("Data Source=data.db;"); |
SqlContext的连接是自动管理的,你无需手动打开或关闭连接,SqlContext以下面的规则管理连接:
- 如果在执行Sql语句之前,数据库连接处于打开状态,则执行完毕后,保持打开状态
- 如果在执行Sql语句之前,数据库连接处于关闭状态,则打开连接,并在执行完毕后关闭连接
假设我们现在要创建名为user
的表(包含id
、name
、password
三个字段),采用ADO.Net我们通常这样写:
1 | conn.Open(); |
而采用SqlContext,我们只需要这样写:
1 | conn.CreateTable("user", "id integer primary key autoincrement,name varchar(32),password varchar(32)").NonQuery(); |
在上面的代码中,我们隐藏了创建命令、打开连接和关闭连接等操作,同时也隐藏了”CREATE TABLE”这样的语法(因为我们只需关心表名、列名和类型即可)。
2.Insert
使用Insert
函数,我们可以快速的向指定的表中插入数据。下面的代码向user
表中插入一条记录,其中name='test'
,password='123456'
,由于id
是自增长的,因此无需手动设置。
1 | conn.Insert("user", "name,password", "test", "123456").NonQuery(); |
在上面的代码中,参数是通过Insert
函数传递的,对于参数较多的情况,我们可以分开传递,如下:
1 | conn.Insert("user", "name,password") |
也可以显示的指定参数(或数据类型),如下:
1 | conn.Insert("user", "name,password") |
为了不引起混乱,建议只使用一种传参方式。
3.Select
使用Select
语句,我们可以快速的从指定的表中查询所需的记录。下面的代码从user
表中查询所有记录,并转为User
对象,如下:
1 | var userList = conn.Select("user").Many(r => new User |
SqlContext采用延迟执行的机制,只有在调用下面的函数之一时才会真正的请求数据库:
- NonQuery,执行SQL而不返回结果
- Many,执行SQL并返回多行结果
- Single,执行SQL并返回单行结果
SqlContext支持简单的ORM,只需在程序启动时注册一次Mapper
函数,以后就可以方便的提取数据了,注册Mapper
的代码如下:
1 | SqlContext.RegistMapper(r => new User |
之后,我们在调用Many
和Single
函数时,只需指明期望的数据类型即可,如下:
1 | var userList = conn.Select("user").Many<User>(); |
4.UpdateSql
使用UpdateSql
语句,我们可以快速更新表中指定的记录。下面的代码找到user
表中id=0
的记录,并把password
更新为abc123
。
1 | conn.UpdateSql("user","password","id=@id") |
在上面的代码中,我们使用了where
语句,当然Select
、Delete
也都支持where
语句。
由于
DbConnection
类已经定义了一个名为Update
的函数,为了不引起冲突,更新操作命名为UpdateSql
5.Delete
使用Delete
语句,我们可以快速的删除指定表中的记录。下面的代码删除user
表中’id=0’的记录。
1 | conn.Delete("user","id=@id",0).NonQuery(); |
6.执行任意Sql
如果你要执行的Sql比较复杂, 可以使用sql
函数来执行任意语句。下面的代码用于查询user
表中所有记录的个数,如下:
1 | var count = conn.Sql("select count(*) from user").SingleValue<long>(); |
三、事务
在SqlContext中使用事务同样很简单,下面的代码展示了如何在一个事务中执行多个Sql语句。
1 | var trans = conn.BeginTransaction(); |
四、完整示例
下面的代码展示了一个使用SqlContext的完整示例:
1 | class Program |
- 本文作者: killf
- 本文链接: http://www.killf.info/代码收藏/SqlContext_api/
- 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!