我的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,如需转载请自行联系原作者

相关文章
|
10天前
|
SQL 数据处理 数据库
实时计算 Flink版产品使用合集之同步数据库时,库名称变了,route只能到表级别,怎么解决
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
10天前
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错之读取Oracle数据库时遇到找不到驱动,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
实时计算 Flink版操作报错之读取Oracle数据库时遇到找不到驱动,是什么原因
|
10天前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用合集之数据库执行的是UPDATE操作,那么Flink监听到的类型是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3天前
|
SQL 关系型数据库 MySQL
Python 操作 MySQL 数据库
Python 操作 MySQL 数据库
11 0
|
5天前
|
SQL Java 数据库连接
MyBatis 操作数据库
MyBatis 操作数据库
|
5天前
|
XML Java 数据库连接
利用MyBatis框架操作数据库2
利用MyBatis框架操作数据库
14 2
|
5天前
|
Java 数据库连接 测试技术
利用MyBatis框架操作数据库1
利用MyBatis框架操作数据库
16 1
|
10天前
|
关系型数据库 数据处理 数据库
实时计算 Flink版产品使用合集之支持哪些数据库的整库同步
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
12天前
|
JavaScript Java 关系型数据库
大学生在线考试|基于SprinBoot+vue的在线试题库系统系统(源码+数据库+文档)
大学生在线考试|基于SprinBoot+vue的在线试题库系统系统(源码+数据库+文档)
21 0
|
12天前
|
安全 Java API
MilvusPlus向量数据库增强操作库
MilvusPlus 是一个针对 Milvus 向量数据库的增强操作库,提供无侵入、损耗小的 API,简化 Milvus 交互。特性包括:注解配置、直观 API、Lambda 支持、主键自动生成及全局通用操作。支持 Spring 和 Solon 应用,通过配置文件管理数据库连接。应用场景如相似性搜索、推荐系统等。CRUD 模块提供类型安全的接口,IAMService 接口模块实现身份管理和权限控制。条件构造器简化查询条件构建。项目提供多种索引和度量类型。示例代码展示了如何使用 MilvusPlus 进行向量搜索操作。
132 1