我的KT库之----数据库的操作(DbCommandBuilder/DbConditionBuilder)

简介:

了解或者认识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;

 

在这节里,将会向大家介绍两个用于构造数据查询命令的对象。

 

数据库命令构造对象:DbCommandBuilder

不知道大家在平常做数据库操作时,是不是经常写INSERT或UPDATE两条SQL语句?如果是并且还在使用SQL语句拼接的话,那DbCommandBuilder就非常适合你的使用,它可以帮你构造生成INSERT或者UPDATE的参数化SQL语句。

 

DbCommandBuilder的实例方法是需要你传递一个“表名”与“DbHelper”对象,如下面示例代码:

using (DbHelper db = new DbHelper(connection))
{
    DbCommandBuilder command = new DbCommandBuilder("user", db);
}

表示将对"user”表进行构造INSERT或者UPDATE语句。

 

DbCommandBuilder的方法

1、AddField : 增加一个字段值。对于INSERT语句来说,这个字段将是会插入到表里;对于UPDATE语句来说,这个字段将是会被更新的。

command.AddField("name", DbType.String, 10, "张三");
                command.AddField("age", DbType.Int32, 20);

注: 此方法有多个重载版本,用于处理字段值的参数化。

 

2、AddCondition : 增加一个条件字段值。在构造UPDATE语句时才需要使用。

command.AddCondition("id", DbType.Int32, 1);

注: 此方法有多个重载版本,用于处理字段值的参数化。

 

3、GetParameter : 获取某个字段参数。只能获取在AddField或者AddCondition方法添加的字段参数。

 

4、ContainParameter : 判断是否存在某个字段参数,只能判断在AddField或者AddCondition方法添加的字段参数。

 

5、Insert : 执行INSERT语句命令

DbCommandBuilder command = new DbCommandBuilder("user", db);
command.AddField("name", DbType.String, 10, "张三");
command.AddField("age", DbType.Int32, 20);
var r = command.Insert();

执行此方法后,将会在user表里插入一行数据,等同于执行以下sql语句

INSERT INTO `user` (`name`,`age`) VALUES (@name,@age)

 

6、Update : 执行UPDATE语句命令

DbCommandBuilder command = new DbCommandBuilder("user", db);
command.AddField("name", DbType.String, 10, "张三");
command.AddField("age", DbType.Int32, 20);
command.AddCondition("id", DbType.Int32, 1);
var r = command.Update();

执行此方法后,将会更新user表里id=1的记录,等同于执行以下sql语句

UPDATE `user` SET `name`=@name,`age`=@age WHERE `id`=@id

 

7、ClearAll : 清空所有添加的字段值或者条件字段值

 

 

DbCommandBuilder的属性

1、DbHelper : 获取对应的DbHelper实例对象

2、TableName : 获取当前操作的表名

3、InsertCommandText : 获取当前字段构造的INSERT语句

DbCommandBuilder command = new DbCommandBuilder("user", db);
command.AddField("name", DbType.String, 10, "张三");
command.AddField("age", DbType.Int32, 20);
command.DbHelper.ExecuteNonQuery(command.InsertCommandText, command.Parameters);

上面的代码等同于直接执行command.Insert()方法。

 

4、UpdateCommandText : 获取当前字段构造的UPDATE语句

DbCommandBuilder command = new DbCommandBuilder("user", db);
command.AddField("name", DbType.String, 10, "张三");
command.AddField("age", DbType.Int32, 20);
command.AddCondition("id", DbType.Int32, 1);
command.DbHelper.ExecuteNonQuery(command.UpdateCommandText, command.Parameters);

上面的代码等同于直接执行command.Update()方法。

 

5、Parameters : 获取当前字段值的参数。其返回的是一个数组,包含当前所有字段的参数值。

 

 

数据查询条件构造对象:DbConditionBuilder

在平时查询数据时,经常都要写不同的查询条件,如果你还是在拼接SQL条件语句,那么DbConditionBuilder也是非常适合你的使用,它可以帮你构造条件语句,并可以参数化处理条件值。

DbConditionBuilder的获取

 直接从DbHelper对象里获取,例子:

var condition = this.DbHelper.CreateDBConditionBuilder();

 

DbConditionBuilder的方法

1、Add : 添加一个条件

                var condition = this.DbHelper.CreateDBConditionBuilder();
                condition.Add("id>1"); //简单添加一个条件,其条件关系是“and”
                condition.Add("id>2", DbConditionRelation.OR); //简单添加一个条件,其条件关系是“or”
                var par = db.CreateDbParameter("name", DbType.String, 20, db.EscapeString("张三"));
                condition.Add("name=" + par.ParameterName, par);  //添加一个条件,并对条件值实行参数化处理,其条件关系是“and”

 

上面的条件语句为

id>1 OR id>2 AND name=@name

 

注意:对于没有进行参数化处理的值,为避免出现“注入”漏洞,请记得将字符串值转义处理!如上面的“db.EscapeString("张三")”

 

2、AddFormat : 添加一个条件,并可以进行格式化处理

var condition = this.DbHelper.CreateDBConditionBuilder();
condition.AddFormat("id>{0}", 1); //简单添加一个条件,其条件关系是“and” condition.AddFormat("name='{0}'", DbConditionRelation.OR, db.EscapeString("张三")); //简单添加一个条件,其条件关系是“or” 

上面的条件语句为

id>1 OR name='张三'

 

注意:为避免出现“注入”漏洞,请记得将字符串值转义处理!如上面的“db.EscapeString("张三")”

3、AddCriteria:  添加一个查询条件

此方法有多个重载版本,是Add方法的快速写法,并且采用添加条件时采用参数化处理。

注:新版本都建议使用此方法添加条件。

 

4、BeginParentheses : 开始左括号的写入

5、EndParentheses : 结束括号的写入

var condition = this.DbHelper.CreateDBConditionBuilder();
condition.BeginParentheses(); condition.Add("id>1"); //简单添加一个条件,其条件关系是“and” condition.Add("id>2", DbConditionRelation.OR); //简单添加一个条件,其条件关系是“or” condition.EndParentheses(); var par = db.CreateDbParameter("name", DbType.String, 20, db.EscapeString("张三")); condition.Add("name=" + par.ParameterName, par); //添加一个条件,并对条件值实行参数化处理,其条件关系是“and” 

上面的条件语句为

 (id>1 OR id>2) AND name=@name

 

6、Clear : 清空所有条件

7、ToString : 已重写,输出带"WHERE“部分的条件语句

var condition = this.DbHelper.CreateDBConditionBuilder();
condition.BeginParentheses(); condition.Add("id<1000"); condition.BeginParentheses(); condition.Add("age>20", DbConditionRelation.OR); condition.Add("age<=30"); condition.EndParentheses(); condition.EndParentheses(); var par = db.CreateDbParameter("name", DbType.String, 20, string.Concat(db.EscapeString("张"), "%")); condition.Add("name like " + par.ParameterName, par); Console.WriteLine(condition.ToString());

上面代码将输出以下语句

WHERE (id<1000 OR (age>20 AND age<=30)) AND name like @name

 

DbConditionBuilder的属性

1、Condition : 获取当前的条件语句

var condition = this.DbHelper.CreateDBConditionBuilder();
condition.BeginParentheses(); condition.Add("id<1000"); condition.BeginParentheses(); condition.Add("age>20", DbConditionRelation.OR); condition.Add("age<=30"); condition.EndParentheses(); condition.EndParentheses(); var par = db.CreateDbParameter("name", DbType.String, 20, string.Concat(db.EscapeString("张"), "%")); condition.Add("name like " + par.ParameterName, par); Console.WriteLine(condition.Condition);

 

上面代码将输出以下语句

(id<1000 OR (age>20 AND age<=30)) AND name like @name

 

2、HasCondition : 判断构造器里面是否有条件

3、Parameters : 获取当前条件中的条件参数值


本文转自Kingthy博客园博客,原文链接:http://www.cnblogs.com/kingthy/archive/2011/09/02/2163873.html,如需转载请自行联系原作者

相关文章
|
4天前
|
存储 数据处理 数据库
深入了解达梦数据库的增删查改操作:从入门到精通
深入了解达梦数据库的增删查改操作:从入门到精通
|
1天前
|
Oracle 关系型数据库 MySQL
实时计算 Flink版操作报错合集之采集oracle的时候报ORA-65040:不允许从可插入数据库内部执行该操作如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
16 3
|
3天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之当 SQL Server 源数据库中的数据更新后,CDC 吐出的操作(op)是怎样的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
13 0
|
4天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
4天前
|
SQL Java 数据库连接
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
JDBC Java标准库提供的一些api(类+方法) 统一各种数据库提供的api
12 0
|
4天前
|
SQL Java 数据库连接
Java数据库编程实践:连接与操作数据库
Java数据库编程实践:连接与操作数据库
12 0
|
4天前
|
SQL JSON 关系型数据库
[UE虚幻引擎插件DTPostgreSQL] PostgreSQL Connector 使用蓝图连接操作 PostgreSQL 数据库说明
本插件主要是支持在UE蓝图中连接和操作PostgreSQL 数据库。
20 2
|
4天前
|
Java 关系型数据库 数据库连接
【C 言专栏】C 语言与数据库的连接与操作
【5月更文挑战第2天】本文探讨了C语言如何连接和操作数据库,介绍了数据库连接的基本原理,如通过ODBC、JDBC或原生接口与数据库交互。文章详细阐述了使用ODBC连接的步骤,并列举了C语言在数据库操作中的常见任务,强调了错误处理、数据类型匹配和性能优化的重要性。通过实际案例,展示了在学生信息管理系统中应用C语言与数据库交互的过程。本文旨在帮助读者更好地理解和应用C语言进行数据库管理。
|
4天前
|
XML Java 数据库连接
Springboot整合mybatisPlus操作数据库
MyBatis-Plus是MyBatis的增强工具,简化开发、提高效率。它提供官网文档,便于集成到SpringBoot项目中。集成步骤包括添加mybatis-plus-boot-starter和数据库驱动依赖,配置数据源,扫描Mapper类包。Mapper接口继承BaseMapper即可使用基本的CRUD操作。示例代码展示了Service层的增删改查实现。MyBatisPlus还支持逻辑删除、自动填充等功能,同时可与Mybatis XML配合使用,通过调整配置指定XML映射文件位置。
|
4天前
|
关系型数据库 MySQL Go
数据库的事务操作
数据库的事务操作