动态网站制作指南
[  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
电脑书籍下载:程序设计书籍 | 数据库教程书籍 | 平面与多媒体书籍 | 网络通讯书籍 | 系统管理书籍 | 网络安全书籍 | 认证考试书籍
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库学院 > 数据库技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Access教程,DB2教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ 数据库技巧 ]的信息

本月文章推荐
.SQL Server 2005使用基于行版本控.
.讲解SQL 2000的Collection排序规.
.在Linux下访问MS SQL Server数据.
.数据库连接字符串大全.
.数据库的数据挖掘概述(二).
.在SQL Server中获得不包含时间部.
.Sql server 提示挂起问题.
.维护Sql Server中表的索引.
.只让指定的机器连接SQLServer服务.
.ms sql删除重复的记录 .
.SQL Server 2005密码安全追踪与存.
.解决SQL Server虚拟内存不足情况.
.全文索引—CONTAINS语法.
.MS SQL Server 2000系统数据类型.
.页面中标题替换方法,在SQL中取数.
.SQL Server SA权限总结经典技术.
.SQLServer中需要避免的查询设计错.
.SQL Server实用经验与技巧大汇集.
.SQL Server 最佳实践分析器使用小.
.关于sql的小玩意 sql server添加.

SQL Artisan组件之Query对象

文章类别:数据库技巧 | 发表日期:2006-2-20 |


概要
       SQL Artisan是.NET基于SQL语句的数据访问组件,它目的是在.NET环境下快速的创建SQL语句并执行,从而让开发人员更有效率地创建数据库访问代码。SQL Artisan除在生成和运行的是标准SQL语句外,在生SQL语句过程中所有值都是通过参数方式进行传递从而解决SQL注入的安全问题。组件的运算符和比较运算符是基于.NET的实现,所以在编译过程中就可以检测语法的合法性,大大减少了开发过程编写SQL 语句拼写错误的问题。组件除了对标准SQL的支持外,还对数据库函进行扩展,让开发人员更灵活地创建数据库操作代码。

Query对象是SQL Artisan组件的主要成员之一,它是SELECT语句基于.NET对象化的实现;最终的目的是通过Query对象来解决全部SELECT查询语句的编写。

Query对象现在所支持的功能

      1)支持单表和多表查询;包括INNER JOIN,LEFT JOIN,RIGHT JOIN等操作。

      2)支持字段的运算符;包括:+,-,*,/

3)支持字段的比较运算符;包括:=,<>,>,>=,<,<=,in,ont in,like, BETWEEN,

not BETWEEN等。

       4)支持聚合函数:Sum,Count,Avg,Max,Min

       5)支持数据库的扩展函数:Year,Month,Len,Left,SubString等。

       6)支持数据分组。

       7)支持数据排序。

Query的处理对象
       在Select语句中主要处理的对象就是表和字段,同样Query中主要处理的对象也是一样。只是表和字段都在.NET中定义相应的类型;分别是HFSoft.Data.Expressions.Table和HFSoft.Data.Expressions.TableField。

        HFSoft.Data.Expressions.Table

     表描述对象,它用于提供Query需要查询的表信息。

    可以通过以下方式来定义一个表对象:

     private HFSoft.Data.Expressions.Table TBL= new  HFSoft.Data.Expressions.Table("Orders");

 

     表对象提供关联方法用于生关联的表对象:

          .INNER JOIN建立两个表的关联表

               1)创建Employees,Orders的关联表对象:

IQuery query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Employees.F_EmployeeID))

 

              2)创建Employees,Orders,Customers的关联表对象:

IQuery query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL,Employees.F_EmployeeID)&Orders.TBL.INNER(Customers.TBL,Orders.F_CustomerID));

 

          .LEFT JOIN建立两个表的左连接关联表

IQuery query = session.CreateQuery(Employees.TBL.LEFT(Orders.TBL,Employees.F_EmployeeID));

 

          .RIGHT JOIN建立两个表的右连接关联表

IQuery query = session.CreateQuery(Employees.TBL.RIGHT(Orders.TBL,Employees.F_EmployeeID));

 

   HFSoft.Data.Expressions.TableField

字段描述对象,它用于提供Query需要查询的字段信息

可以通过以下方式定义一个字段对象:

private HFSoft.Data.Expressions.TableField F_mOrderID = new HFSoft.Data.Expressions.TableField("OrderID");

 

字段对象提供丰富的运算功能,包括比较运算和数据库函数等。

运算功能:+,-,*,/

比较功能:==,!=,>,>=,<,<=,Like,In,NotIn, Match, Between, NotBetween

聚合函数:Max,Min,Count,Sum,Avg

组合运算:&,|

              数据库扩展函数:

                     MSSQL: CAST, ABS, FLOOR, DATEADD,YEAR,MONTH,DAY等。

                     其它数据暂时没提供。

Query组成部分
    Table属性

获取或设置需要查询的表对象,可以通过表的关联方法创建关联表对象。些属性不能为null。

    Selects属性

获取或设置查询的字段对象集,此属可以为null。当为null时如果查询的表是单表则表示返回表的所有字段否则回基础表的所有字段。

可以通过字段的相关组合来产生新的查询字段;如:字段+,-,*,/运算,还可以套用聚合函数和数据库函数等。

1)IQuery query = session.CreateQuery(OrderDetails.TBL);

query.Selects = new TableField[]{SqlMath.Count(OrderDetails.ALL).As("CountValue"),OrderDetails.F_OrderID};

 

    2)IQuery query = session.CreateQuery(Employees.TBL);

query.Selects = new TableField[]{(Employees.F_LastName +Employees.F_LastName).As("Name"),Employees.ALL};

 

Expreesion属性

       获取或设置条表达式,此属可以为null。当为null时查询获取表的所有记录。

       条件表达式可以通过字段对象的比较运算和组合运算符产生,比较过程中字段可以调用运算符或数据库函数。

 

1)  IQuery query = session.CreateQuery(Orders.TBL);

        query.Expreesion = Orders.F_EmployeeID ==3 & (Orders.F_OrderDate.Between("1996-6-1", "1996-8-1")|Orders.F_OrderDate.Between("1997-6-1", "1997-8-1"));

 

OrderBy属性

获取或设置排序字段对象集,此属性可以为null。当为null时查询过程不对任何字段进行排序。

1)  IQuery query = session.CreateQuery(Orders.TBL);

query.OrderBy = new TableField[]{Orders.F_EmployeeID.DESC,Orders.F_OrderDate.ASC};

GroupBy属性

获取或设置分组字段对象集,些属性可以为null。当为null时查询过程不进行分组。

1) IQuery query = session.CreateQuery(OrderDetails.TBL);

query.Selects = new TableField[]{SqlMath.Max(OrderDetails.F_Quantity).As("MaxValue"),OrderDetails.F_OrderID};

query.GroupBy = new TableField[]{OrderDetails.F_OrderID};

 

System.Data.DataSet ExecuteDataSet()

该方法是生成并执行相关的SQL语句,把获取的数据填充到DataSet对象中并返回。

Query用例
       SQL:

              select *  from orders where orderid>10300 and orderid<10500;

       SQL Artisan:

           using(IDataSession session = MappingContainer.ConfigContainer.OpenSession())

         {

              session.Open();

              IQuery query = session.CreateQuery(Orders.TBL);

              query.Expreesion = (Orders.F_OrderID > 10300 & Orders.F_OrderID < 10500);

              this.dataGrid1.DataSource = query.ExecuteDataSet().Tables[0];

         }

 

     SQL:

              select orders.*,employees.* from orders inner join employees on orders.employeeid=employees.employeeid;

     SQL Artisan:

           using(IDataSession session = MappingContainer.ConfigContainer.OpenSession())

         {

              session.Open();

              IQuery query = session.CreateQuery(Orders.TBL.INNER(Employees.TBL,Orders.F_EmployeeID));

              query.Selects = new TableField[]{Orders.ALL.At(Orders.TBL),Employees.ALL.At(Employees.TBL)};

                   this.dataGrid1.DataSource = query.ExecuteDataSet().Tables[0];

                  

         }

 

SQL:

     SELECT * FROM Orders  where ( EmployeeID = 3  And ( (OrderDate BETWEEN  '1996-6-1' And '1996-8-1' )  Or (OrderDate BETWEEN  '1997-6-1' And '1997-8-1' ) ) )

     SQL Artisan:

           using(IDataSession session = MappingContainer.ConfigContainer.OpenSession())

         {

              session.Open();

              IQuery query = session.CreateQuery(Orders.TBL);

              query.Expreesion = Orders.F_EmployeeID ==3 & (Orders.F_OrderDate.Between( "1996-6-1", "1996-8-1")|Orders.F_OrderDate.Between("1997-6-1", "1997-8-1"));

                   this.dataGrid1.DataSource = query.ExecuteDataSet().Tables[0];

                  

         }

 

SQL:

     SELECT Orders.* FROM Orders INNER JOIN [Order Details] ON Orders.OrderID=[Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID=Products.ProductID INNER JOIN Categories ON Products.CategoryID=Categories.CategoryID  where Categories.CategoryName like '%con%'

     SQL Artisan:

           using(IDataSession session = MappingContainer.ConfigContainer.OpenSession())

         {

              session.Open();

              IQuery query = session.CreateQuery(Orders.TBL.INNER(OrderDetails.TBL,Orders.F_OrderID)

                                     &OrderDetails.TBL.INNER(Products.TBL,OrderDetails.F_ProductID)

                                     &Products.TBL.INNER(Categories.TBL,Products.F_CategoryID));

              query.Selects = new TableField[]{Orders.ALL.At(Orders.TBL)};

              query.Expreesion = Categories.F_CategoryName.At(Categories.TBL).Match("con");

              this.dataGrid1.DataSource = query.ExecuteDataSet().Tables[0];

                  

         }

 

SQL:

     SELECT Orders.* FROM Orders INNER JOIN [Order Details] ON Orders.OrderID=[Order Details].OrderID INNER JOIN Products ON [Order Details].ProductID=Products.ProductID INNER JOIN Categories ON Products.CategoryID=Categories.CategoryID  where ( Categories.CategoryID = 3  And (Orders.OrderDate BETWEEN  '1996-1-1' And '1996-12-31' ) )

     SQL Artisan:

           using(IDataSession session = MappingContainer.ConfigContainer.OpenSession())

         {

              session.Open();

              IQuery query = session.CreateQuery(Orders.TBL.INNER(OrderDetails.TBL,Orders.F_OrderID)&

                                                             OrderDetails.TBL.INNER(Products.TBL,OrderDetails.F_ProductID)&

                                                             Products.TBL.INNER(Categories.TBL,Products.F_CategoryID));

              query.Selects = new TableField[]{Orders.ALL.At(Orders.TBL)};

              query.Expreesion = Categories.F_CategoryID.At(Categories.TBL) ==3 &

                                        Orders.F_OrderDate.At(Orders.TBL).Between("1996-1-1","1996-12-31");

              this.dataGrid1.DataSource = query.ExecuteDataSet().Tables[0];

         }

 

--用例代码下载--

SQL Artisan和SQL参照表

SQL

SQL Artisan

语句

Select语句

Query对象

 

Delete语句

DeleteCommand对象

Update语句

UpdateCommand对象

Insert Inser语句

InsertCommand对象

 

运行符

+

+

 

-

-

*

*

/

/

 

逻辑运算符

and

&

 

or

|

 

聚合函数

Sum

SqlMath.Sum

 

Max

SqlMath.Max

Min

SqlMath.Min

Count

SqlMath.Count

Avg

SqlMath.Avg

 

比较运算符

=

==

 

<>

!=

>

>

>=

>=

<

<

<=

<=

In

In

Not In

NotIn

Like

Like

Between

Between

Not Between

NotBetween

 

Match

 

其他

ASC

ASC

 

DESC

DESC

 

 

 

 

 

 

MSSQL支持的函数

CAST

MSSqlMath.CAST

 

ABS

MSSqlMath.ABS

FLOOR

MSSqlMath.FLOOR

CEILING

MSSqlMath.CEILING

DATEADD

MSSqlMath.DATEADD

DATEDIFF

MSSqlMath.DATEDIFF

DATENAME

MSSqlMath.DATENAME

DAY

MSSqlMath.DAY

MONTH

MSSqlMath.MONTH

YEAR

MSSqlMath.YEAR

LEFT

MSSqlMath.LEFT

LEN

MSSqlMath.LEN

REPLACE

MSSqlMath.REPLACE

RIGHT

MSSqlMath.RIGHT

STR

MSSqlMath.STR

SUBSTRING

MSSqlMath.SUBSTRING

 

 

 

 

 

 


上一篇:利用视图管理器编写高效 SQL SELECT 语句 人气:7116
下一篇:一种简单的表中删除重复行的方法 人气:9080
点击此处浏览全部Sql server的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-5-16 乘风多用户PHP统计系统 v3.4
2008-5-16 轩溪下载系统 v3.78 build 0515
2008-5-16 普沙B2B 浙江省商贸网 v2.0
2008-5-16 asp抓蜘蛛的小程序 v1.0
2008-5-16 齐齐乐网私服发布站 仿haosf新版
2008-5-16 IssTech信息反馈系统 v1.0
2008-5-16 自由领域大头贴(js接口版) 修正版
2008-5-16 医院网站系统
2008-5-16 智拓-分类信息管理系统 v5.0
2008-5-7 Windows XP SP3 官方英文版
2008-5-7 Windows XP SP3 官方香港中文版
2008-5-7 Windows XP SP3 官方繁体中文版
2008-5-7 Windows XP SP3 官方简体中文版
2008-4-30 Multiple Unzip Wizard 1.02
2008-4-30 Multiple Unrar Wizard 1.0.0
2008-4-30 WinZip Install/Try/Uninstall a
2008-4-30 ZIP压缩文件修复器WzipFix 2.0
2008-4-30 Pentazip 6.01 Build 189 For Wi
  发表评论
姓 名: 验证码: [ 全部贴吧 ] [ 浏览评论 ]
内 容:
[ 汉字翻译拼音 ] [ 广告代码 ] [ 符号对照表 ] [ 进制转换 ] [ 经典小工具 ] [ 个税计算 ] [ 汉字简繁转换 ] [ 普通单位换算 ] [ 公制单位换算 ]
[ 生辰老黄历 ] [ 国内电话区号 ] [ 国家代码与域名缩写 ] [ 文字加密解密 ] [ 健康查询 ] [ 万年历 ] [ 手机号码查询 ] [ ip搜索 ] [ Google PR查询 ]
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報