我的KT库之----数据库的操作(DbHelper)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

了解或者认识KT:

http://www.cnblogs.com/kingthy/archive/2011/08/08/2130973.html

在项目中如何使用KT?

KT是一个库,所以将KT的dll文件引用到您的项目上即可使用KT里的函数功能。

 

本节将介绍大家如何使用KT库操作数据库。KT里的数据库操作对象存放于在“KT.Framework.Database“下,当你已在你的项目里引用了KT库后,则写下以下代码就可以使用了。

using KT.Framework.Database;

 

数据库帮助对象: DbHelper

DbHelper类似于微软的SqlHelper,但又有不同的区别。

DbHelper是对DbConnection对象进行封装,并且是一个实例对象,在使用它时必须进行实例化,如下面示例

OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\db.mdb");
DbHelper db = new DbHelper(connection);

 

在实例化DbHelper时传入了一个OleDbConnection对象,之后在DbHelper进行的操作大部分都是针对OleDbConnection对象进行的,并且在每执行一次命令都会自动恢复DbConnection对象的原状态(如:原状态是关闭的,则在执行命令时将会自动打开,执行完后将恢复关闭状态)。

DbHelper还有一个实例化重载函数,可设置是否保持DbConnection对象的打开状态,如下面的代码

DbHelper db = new DbHelper(connection, true);

 

使用此重载函数实例化后,DbConnection在被打开(Open)之后,将会一值保持打开状态,直到手动关闭(Close)为此

 

DbHelper的方法

1、ChangeDbConnection : 更换DbConnection

2、BeginTransaction : 启动事务,启动之后所有数据执行命令都将在同一个事务里执行。

3、CommitTransaction : 提交事务

4、RollbackTransaction : 回滚事务

5、OpenClose : 打开/关闭DbConnection

6、CreateDbCommand : 建立一个DbCommand对象

var command = db.CreateDbCommand("select * from [user]");

 

7、CreateDbCommandWrapped : 建立一个已对DbCommand包装了的DbCommandWrapped对象

var command = db.CreateDbCommandWrapped("select * from [user]");

 

8、CreateDbDataAdapter : 建立一个DbDataAdapter对象

9、CreateDbParameter : 建立一个DbParameter参数对象。注意:参数名不需要带前缀

var pName = db.CreateDbParameter("name", DbType.String, 30, "张三");

 

10、ExecuteScalar : 执行命令并返回第一行第一列的数据

var id = db.ExecuteScalar("select top 1 Id from [user]").As<int>();

 

11、ExecuteReader : 执行命令并返回DbReader数据流

using (var reader = db.ExecuteReader("select * from [user]"))
{
    while (reader.Read())
    {
        //读取数据
    }
}

 

12、ExecuteNonQuery : 执行命令并返回受影响的行数

var success = db.ExecuteNonQuery("update [user] set name='李四' where id=1") > 0;

 

13、ExecuteDataSet : 执行命令并返回DataSet对象

var dataset = db.ExecuteDataSet("select * from [user]");

 

14、ExecuteDbObject<T> : 执行命令并返回一个数据对象

var user = db.ExecuteDbObject<DbUser>("select * from [user] where id=1");

 

15、ExecuteDbObjectList<T> : 执行命令并返回数据对象列表

var users = db.ExecuteDbObjectList<DbUser>("select * from [user]");

 

16、FillDataSet : 执行集合并填充DataSet数据表

17、GetDbParameterName : 获取一个带前缀的参数名称

var pName = db.GetDbParameterName("name");  //如果传入的是SqlConnection、OleDbConnection对象则返回“@name”

 

18、QuoteIdentifier : 对标识符(表名、列名)进行处理。也就是在表名或列名前后加上相应的引用符(如Sql server则是加入“[”与“]”,但在MySql里则是“`”)

string sql = string.Format("select {0},{1} from {2}",
        db.QuoteIdentifier("name"),
        db.QuoteIdentifier("age"),
        db.QuoteIdentifier("user"));

上面语句经过这样处理后,则可以兼容所有数据库,当DbHelper当前是对SqlConnection执行操作,则上面的sql等于

select [name],[age] from [user]

而如果是对OleDbConnection的Access环境下,则是这样的语句

select `name`,`age` from `user`

嗯?是不是和MySql数据库的语法一样?。

但需要注意的是,如果是在OleDbConnection或OdbcConnection执行环境,如果数据源还处于未打开(Open)的状态,则调用此方法后,DbHelper会自动打开数据源并保持打开状态。

 

19、EscapeString : 对字符串数据进行转义处理。比如Sql server数据库则需要字符串里的单引号进行转义。

string text = db.EscapeString("当前时间是'2011-08-01 20:33'");

 

对于SqlConnection或者OleDbConnection返回的都是

当前时间是''2011-08-01 20:33''

 

而如果是在MySql环境下则返回的是

当前时间是\'2011-08-01 20:33\'

 

 

DbHelper的属性

1、Connection : 返回当前执行的数据库连接对象(DbConnection)

2、DbTransaction : 返回或设置在执行命令时使用的事务,一般通过BeginTransaction方法启用事务,如果需要使用其它外部事务则可以设置此属性进行更改。

3、DbTransactionIsCreatedByDbConnection : 返回DbTransaction 是否是通过BeginTransaction方法建立的还是由外部手工设置的。

4、KeepConnection :当前的DbHelper是否是处于保持打开状态模式的。

using (DbHelper db = new DbHelper(connection))
{
    db.ExecuteNonQuery("update [user] set age=22 where id=1");                //打开一次,执行完后又关闭
    var user = db.ExecuteDbObject<DbUser>("select * from [user] where id=1"); //打开一次,执行完后又关闭
}

上面代码里,执行两次命令共需要打开2次DbConnection。

using (DbHelper db = new DbHelper(connection, true))
{
    db.ExecuteNonQuery("update [user] set age=22 where id=1");                //打开一次,执行完后又不关闭
    var user = db.ExecuteDbObject<DbUser>("select * from [user] where id=1"); //直接执行
}

上面代码,则只需要打开1次DbConnection

 

5、Executor : 返回一个DbCommandExecutor对象(关于此对象见后文)。

 

 注:DbHelper里的内部方法很多是虚方法,所以你可以根据你的需要对其重写以适用不同的数据库,比如KT里提供的MySqlDbHelper,就是继承于DbHelper并重写部分内部方法,以便适应MySql数据库环境。

 

数据命令的包装对象:DbCommandWrapped

对于DbCommand有一个小问题,在执行命令时,如果使用了参数,在执行完成后如果忘记了调用Clear方法清除,将会导致那些参数无法再次使用!!具体可查看我的这篇文章《认父亲的DbParameter!!

 

所以我在KT对DbCommand加了一个包装对象,类似如下的代码:

/// <summary>
/// 对DbCommand进行包装
/// </summary>
public class DbCommandWrapped : IDisposable
{
    /// <summary>
    /// 
    /// </summary>
    /// <param name="command"></param>
    /// <param name="keepConnection"></param>
    public DbCommandWrapped(DbCommand command) 
    {
        this.Command = command;
    }

    public DbCommand Command;

    public void Dispose()
    {
        if (this.Command != null)
        {
            this.Command.Parameters.Clear();
            this.Command.Dispose();
        }
    }
}

有了这个包装对象,我们在执行命令时直接using一下就可以回收参数了,如下面代码

var pId = db.CreateDbParameter("@id", DbType.Int32, 1);
using (var command = db.CreateDbCommandWrapped("update [user] set age=22 where id=@id", pId))
{
    command.ExecuteNonQuery();
}
//pId可以再次使用
var user = db.ExecuteDbObject<DbUser>("select * from [user] where id=@id", pId);
本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2011/08/26/2155058.html ,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5天前
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
|
13天前
|
DataWorks 关系型数据库 调度
DataWorks操作报错合集之DataWorks 数据库同步任务中,如果遇到表情符报错的现象,怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
29 0
|
3天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
4天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
9 0
|
5天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
9 0
|
7天前
|
SQL JSON 关系型数据库
[UE虚幻引擎插件DTPostgreSQL] PostgreSQL Connector 使用蓝图连接操作 PostgreSQL 数据库说明
本插件主要是支持在UE蓝图中连接和操作PostgreSQL 数据库。
16 2
|
11天前
|
Java 关系型数据库 数据库连接
【C 言专栏】C 语言与数据库的连接与操作
【5月更文挑战第2天】本文探讨了C语言如何连接和操作数据库,介绍了数据库连接的基本原理,如通过ODBC、JDBC或原生接口与数据库交互。文章详细阐述了使用ODBC连接的步骤,并列举了C语言在数据库操作中的常见任务,强调了错误处理、数据类型匹配和性能优化的重要性。通过实际案例,展示了在学生信息管理系统中应用C语言与数据库交互的过程。本文旨在帮助读者更好地理解和应用C语言进行数据库管理。
|
13天前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。
|
13天前
|
关系型数据库 MySQL Go
数据库的事务操作
数据库的事务操作
|
13天前
|
关系型数据库 MySQL Go
数据库的事务操作 | 青训营
数据库的事务操作 | 青训营