Hxj.Data 数据库组件文档 下载本文

排序在查询中设置的方法就是OrderBy( ) 如果多个字段排序则如下操作:

DbSession.Default.From()

.OrderBy(Products._.CategoryID.Asc && Products._.ProductID.Asc) .ToList(); 生成的sql

Text:

SELECT * FROM [Products] ORDER BY [Products].[CategoryID] ASC,[Products].[ProductID] ASC

分组

通过方法GroupBy来设置按照哪些字段分组。 例如:

DbSession.Default.From()

.GroupBy(Products._.ProductName.GroupBy) .Select(Products._.ProductName) .ToDataTable(); 生成的sql:

Text:

SELECT [Products].[ProductName] FROM [Products] GROUP BY [Products].[ProductName]

按照多个字段分组和多个排序类似。

DbSession.Default.From()

.GroupBy(Products._.ProductName.GroupBy && Products._.ProductID.GroupBy)

.Select(Products._.ProductName,Products._.ProductID) .ToDataTable(); sql:

Text:

SELECT [Products].[ProductName],[Products].[ProductID] FROM [Products] GROUP BY [Products].[ProductName],[Products].[ProductID]

排序和分组都变得简单了。 下一节将讲述Field。

33

数据库组件 Hxj.Data (十六) (查询的字段)

在查询没有设置查询字段,组件默认是返回所有字段信息,即select * from table

那在查询中如何设置需要返回的字段信息呢?

在之前几节中的例子已经存在设置查询字段,是通过 select方法来设置的。 先上例子:

DbSession.Default.From()

.Select(Products._.ProductID, Products._.ProductName) .ToDataTable();

这里是设置查询只返回productid和productname两个字段。 生成的sql:

Text:

SELECT [Products].[ProductID],[Products].[ProductName] FROM [Products]

有时候我们需要设置这个字段的别名,如select productname as pname from products

别名的设置也是非常简单的。

DbSession.Default.From()

.Select(Products._.ProductID, Products._.ProductName.As(\)) .ToDataTable(); 通过字段的as方法来设置。 生成的sql

Text:

SELECT [Products].[ProductID],[Products].[ProductName] AS [pname] FROM [Products]

是不是很简单的啊。

其实 Products._.ProductID是一个Field类,表示字段信息。 Field也提供了一些简单的辅助方法。 方法 Field.Count() Field.Sum()

sql count记录数 sum合计 34

Field.Avg() Field.Len() Field.Trim() Field.Max() Field.Min() Field.Left(int length) avg平均值 len长度 去掉左右空格 最大值 最小值 从左边开始截取相应长度内容 Field.Right(int length) 从右边开始截取相应长度内容 Field.Substring(int 截取相应的范围内的字段内startIndex, int endIndex) 容 还是上例子吧

DbSession.Default.From()

.Select(Products._.UnitPrice.Max()) .ToScalar();

这里是查询products表中最大的unitprice. 生成的sql

Text:

SELECT max([Products].[UnitPrice]) AS [UnitPrice] FROM [Products]

其他方法都是类似就不再一一举例了。

有时候我们需要两个字段加减乘除,比如单价乘以数量出来总价。 先来个例子:

DbSession.Default.From()

.Select((Order_Details._.UnitPrice * Order_Details._.Quantity).As(\)) .Top(10)

.ToDataTable(); 生成的sql如下:

Text:

SELECT TOP 10 [Order Details].[UnitPrice] * [Order Details].[Quantity] AS [totalprice] FROM [Order Details]

组件重载了 Field 的 + – * / 这四个操作符。 分别代表了加、减、乘、除 下一节将讲述事务。

数据库组件 Hxj.Data (十七) (事务)

首先对事务进行了升级,所以又要重新去下载一下新版本。

35

组件提供了简单的事务,并没有过多的封装。 先上个例子:

using (DbTrans trans = DbSession.Default.BeginTransaction()) {

DbSession.Default.Update(Products._.ProductName, \, Products._.ProductID == 1, trans);

DbSession.Default.Update(Products._.ProductName, \, Products._.ProductID == 2, trans); trans.Commit(); }

trans.Commit(); 必须提交,不然就执行不成功了。 如果使用try catch的写法如下:

DbTrans trans = DbSession.Default.BeginTransaction(); try {

DbSession.Default.Update(Products._.ProductName, \, Products._.ProductID == 1, trans);

DbSession.Default.Update(Products._.ProductName, Products._.ProductID == 2, trans); trans.Commit(); } catch {

trans.Rollback(); }

finally {

trans.Close(); }

insert、update、delete方法都提供了DbTransaction参数 所以也只是添加,修改,删除可以提交事务。 存储过程和直接sql执行也是可以添加事务的。 例如:

DbTrans trans = DbSession.Default.BeginTransaction(); DbSession.Default.FromProc(\Products\).SetDbTransaction(trans); 通过SetDbTransaction方法来添加事务。 FromSql也是一样。

\, 36