zoukankan      html  css  js  c++  java
  • 我的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 : 获取当前条件中的条件参数值

  • 相关阅读:
    Window 窗口类
    使用 Bolt 实现 GridView 表格控件
    lua的table库
    Windows编程总结之 DLL
    lua 打印 table 拷贝table
    使用 xlue 实现简单 listbox 控件
    使用 xlue 实现 tips
    extern “C”
    COleVariant如何转换为int double string cstring
    原来WIN32 API也有GetOpenFileName函数
  • 原文地址:https://www.cnblogs.com/kingthy/p/2163873.html
Copyright © 2011-2022 走看看