惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
D
Docker
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI
L
LangChain Blog
月光博客
月光博客
U
Unit 42
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
N
Netflix TechBlog - Medium
D
DataBreaches.Net
T
Tailwind CSS Blog
H
Help Net Security
MongoDB | Blog
MongoDB | Blog
V
Visual Studio Blog
B
Blog
G
Google Developers Blog
有赞技术团队
有赞技术团队
Y
Y Combinator Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
Recorded Future
Recorded Future
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
Jina AI
Jina AI
Engineering at Meta
Engineering at Meta
C
Check Point Blog
V
V2EX
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
F
Full Disclosure
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
罗磊的独立博客
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
Apple Machine Learning Research
Apple Machine Learning Research
量子位
博客园 - 司徒正美
博客园 - 叶小钗

博客园 - Kingthy

【开源项目】智能电视及电视盒子的控制应用TVRemoteIME的接口说明 实现安卓里边下边播的播放器(源码公开) 现在很火的答题赢钱游戏,让我来简单教你怎么做自动答题器 【开源项目】电视盒子好用又强大的APP: TVRemoteIME [原创]用C#实现微信“跳一跳”小游戏的自动跳跃助手 javascript图片隐写术,感觉可以用它来干点有想法的事情 我的KT库之----与VT的结合 VTemplate模板引擎的使用—Function标签 我的KT库之----数据库的操作(DbCommandExecutor) 我的KT库之----数据库的操作(DbHelper) 我的KT库之----数据对象 【原创】腾讯微博的XSS攻击漏洞 我的KT库之-----缓存与配置 我的KT库之-----对象池 我的KT库之-----扩展方法 我的KT库之-----认识KT [开源]基于C#的腾讯微博SDK V0.1版本发布 怪异的StackOverflowException异常 开源的Kingthy.Mail邮件组件库
我的KT库之----数据库的操作(DbCommandBuilder/DbConditionBuilder)
Kingthy · 2011-09-02 · via 博客园 - Kingthy

了解或者认识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 : 获取当前条件中的条件参数值