国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

SQL Artisan組件之Query對象

2024-07-21 02:31:34
字體:
供稿:網(wǎng)友

概要
       SQL Artisan是.NET基于SQL語句的數(shù)據(jù)訪問組件,它目的是在.NET環(huán)境下快速的創(chuàng)建SQL語句并執(zhí)行,從而讓開發(fā)人員更有效率地創(chuàng)建數(shù)據(jù)庫訪問代碼。SQL Artisan除在生成和運(yùn)行的是標(biāo)準(zhǔn)SQL語句外,在生SQL語句過程中所有值都是通過參數(shù)方式進(jìn)行傳遞從而解決SQL注入的安全問題。組件的運(yùn)算符和比較運(yùn)算符是基于.NET的實(shí)現(xiàn),所以在編譯過程中就可以檢測語法的合法性,大大減少了開發(fā)過程編寫SQL 語句拼寫錯(cuò)誤的問題。組件除了對標(biāo)準(zhǔn)SQL的支持外,還對數(shù)據(jù)庫函進(jìn)行擴(kuò)展,讓開發(fā)人員更靈活地創(chuàng)建數(shù)據(jù)庫操作代碼。

Query對象是SQL Artisan組件的主要成員之一,它是SELECT語句基于.NET對象化的實(shí)現(xiàn);最終的目的是通過Query對象來解決全部SELECT查詢語句的編寫。

Query對象現(xiàn)在所支持的功能

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

      2)支持字段的運(yùn)算符;包括:+,-,*,/

3)支持字段的比較運(yùn)算符;包括:=,<>,>,>=,<,<=,in,ont in,like, BETWEEN,

not BETWEEN等。

       4)支持聚合函數(shù):Sum,Count,Avg,Max,Min

       5)支持?jǐn)?shù)據(jù)庫的擴(kuò)展函數(shù):Year,Month,Len,Left,SubString等。

       6)支持?jǐn)?shù)據(jù)分組。

       7)支持?jǐn)?shù)據(jù)排序。

Query的處理對象
       在Select語句中主要處理的對象就是表和字段,同樣Query中主要處理的對象也是一樣。只是表和字段都在.NET中定義相應(yīng)的類型;分別是Hfsoft.Data.ExPRessions.Table和HFSoft.Data.Expressions.TableField。

        HFSoft.Data.Expressions.Table

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

    可以通過以下方式來定義一個(gè)表對象:

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

 

     表對象提供關(guān)聯(lián)方法用于生關(guān)聯(lián)的表對象:

          .INNER JOIN建立兩個(gè)表的關(guān)聯(lián)表

               1)創(chuàng)建Employees,Orders的關(guān)聯(lián)表對象:

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

 

              2)創(chuàng)建Employees,Orders,Customers的關(guān)聯(lián)表對象:

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

 

          .LEFT JOIN建立兩個(gè)表的左連接關(guān)聯(lián)表

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

 

          .RIGHT JOIN建立兩個(gè)表的右連接關(guān)聯(lián)表

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

 

   HFSoft.Data.Expressions.TableField

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

可以通過以下方式定義一個(gè)字段對象:

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

 

字段對象提供豐富的運(yùn)算功能,包括比較運(yùn)算和數(shù)據(jù)庫函數(shù)等。

運(yùn)算功能:+,-,*,/

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

聚合函數(shù):Max,Min,Count,Sum,Avg

組合運(yùn)算:&,|

              數(shù)據(jù)庫擴(kuò)展函數(shù):

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

                     其它數(shù)據(jù)暫時(shí)沒提供。

Query組成部分
    Table屬性

獲取或設(shè)置需要查詢的表對象,可以通過表的關(guān)聯(lián)方法創(chuàng)建關(guān)聯(lián)表對象。些屬性不能為null。

    Selects屬性

獲取或設(shè)置查詢的字段對象集,此屬可以為null。當(dāng)為null時(shí)如果查詢的表是單表則表示返回表的所有字段否則回基礎(chǔ)表的所有字段。

可以通過字段的相關(guān)組合來產(chǎn)生新的查詢字段;如:字段+,-,*,/運(yùn)算,還可以套用聚合函數(shù)和數(shù)據(jù)庫函數(shù)等。

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屬性

       獲取或設(shè)置條表達(dá)式,此屬可以為null。當(dāng)為null時(shí)查詢獲取表的所有記錄。

       條件表達(dá)式可以通過字段對象的比較運(yùn)算和組合運(yùn)算符產(chǎn)生,比較過程中字段可以調(diào)用運(yùn)算符或數(shù)據(jù)庫函數(shù)。

 

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屬性

獲取或設(shè)置排序字段對象集,此屬性可以為null。當(dāng)為null時(shí)查詢過程不對任何字段進(jìn)行排序。

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

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

GroupBy屬性

獲取或設(shè)置分組字段對象集,些屬性可以為null。當(dāng)為null時(shí)查詢過程不進(jìn)行分組。

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()

該方法是生成并執(zhí)行相關(guān)的SQL語句,把獲取的數(shù)據(jù)填充到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對象

 

運(yùn)行符

+

+

 

-

-

*

*

/

/

 

邏輯運(yùn)算符

and

&

 

or

|

 

聚合函數(shù)

Sum

SqlMath.Sum

 

Max

SqlMath.Max

Min

SqlMath.Min

Count

SqlMath.Count

Avg

SqlMath.Avg

 

比較運(yùn)算符

=

==

 

<>

!=

>

>

>=

>=

<

<

<=

<=

In

In

Not In

NotIn

Like

Like

Between

Between

Not Between

NotBetween

 

Match

 

其他

ASC

ASC

 

DESC

DESC

 

 

 

 

 

 

MSSQL支持的函數(shù)

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

 

 

 

 

 

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富顺县| 金寨县| 七台河市| 和政县| 黄龙县| 新巴尔虎右旗| 吉木乃县| 张家川| 田阳县| 吐鲁番市| 富蕴县| 乌什县| 辽宁省| 茌平县| 泗水县| 临沭县| 平乡县| 工布江达县| 建湖县| 卢湾区| 时尚| 屏山县| 浦东新区| 临漳县| 鄯善县| 巨鹿县| 同江市| 封开县| 泗阳县| 泰安市| 海门市| 林甸县| 平果县| 武汉市| 阜新市| 兴和县| 华亭县| 衢州市| 淳安县| 安庆市| 嘉善县|