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

  • 相关阅读:
    主题:钩子函数简析及实例
    boa安装
    Inno Setup入门(二十一)——Inno Setup类参考(7)
    Inno Setup入门(二十)——Inno Setup类参考(6)
    Inno Setup入门(十九)——Inno Setup类参考(5)
    Inno Setup入门(十八)——Inno Setup类参考(4)
    Inno Setup入门(十七)——Inno Setup类参考(3)
    Inno Setup入门(十六)——Inno Setup类参考(2)
    sqlite 增加字段语句
    判断 Selite中标存在或者字段存在的方法
  • 原文地址:https://www.cnblogs.com/kingthy/p/2163873.html
Copyright © 2011-2022 走看看