我的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 : 获取当前条件中的条件参数值

posted @ 2011-09-02 15:46  Kingthy  阅读(3854)  评论(3编辑  收藏  举报