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

.AddParameter(parameters) .ToDataTable();

这样写似乎太麻烦了,更简洁的写法如下:

DbSession.Default.FromSql(\* from products where productid=pid or categoryid=cid\) .AddInParameter(\, DbType.Int32, 1) .AddInParameter(\, DbType.Int32, 2) .ToDataTable();

这样就清爽多了。 返回类型还可以如下: IDataReader ToDataReader() 返回DataReader

DataSet ToDataSet() 返回DataSet

int ExecuteNonQuery() 返回受影响的条数 object ToScalar() 返回单个值

TResult ToScalar() 返回执行类型的值 也可返回实体。

TEntity ToFirst() 返回第一条实体

List ToList() 返回实体列表

sql语句的执行也是简单明了的。 下一节将讲述存储过程的执行。

数据库组件 Hxj.Data(八)(存储过程篇)

上一节讲述的sql语句的执行,本节将讲述的是存储过程的执行。执行存储过程是通过FromProc方法来完成的。

21

执行无参数存储过程如下:

DbSession.Default.FromProc(\).ToDataTable();

\就是存储过程名称。 执行带参数的存储过程:

DbSession.Default.FromProc(\)

.AddInParameter(\, DbType.DateTime, \) .AddInParameter(\, DbType.DateTime, \) .ToDataTable();

数据库中该存储过程

create procedure \by Year\

@Beginning_Date DateTime, @Ending_Date DateTime AS

SELECT Orders.ShippedDate, Orders.OrderID, \Order Subtotals\DATENAME(yy,ShippedDate) AS Year

FROM Orders INNER JOIN \Order Subtotals\ON Orders.OrderID = \Order Subtotals\WHERE Orders.ShippedDate Between @Beginning_Date And @Ending_Date GO

有两个参数,分别是Beginning_Date和Ending_Date。 存储过程和sql语句的执行类似,不过存储过程多了参数,就是会有输入输出参数。 通过

AddInputOutputParameter 方法添加输入输出参数 AddOutParameter 方法添加输出参数

AddReturnValueParameter 方法添加返回参数 返回参数值,示例如下:

ProcSection proc = DbSession.Default.FromProc(\) .AddInParameter(\, System.Data.DbType.Int32, 1) .AddOutParameter(\, System.Data.DbType.Int32)

.AddOutParameter(\, System.Data.DbType.String,100); proc.ExecuteNonQuery();

Dictionary returnValue = proc.GetReturnValues(); foreach (KeyValuePair kv in returnValue) {

Response.Write(\+ kv.Key + \+ Convert.ToString(kv.Value)); Response.Write(\); }

其中GetReturnValues()方法就是回去返回值。 存储过程的执行也是很简单的。

22

下一节将讲述DbSession的其他简单辅助方法。

数据库组件 Hxj.Data(九)(DbSession的其他介绍)

本节将讲述DbSession的其他简单辅助方法。 SUM方法

DbSession.Default.Sum(Products._.UnitPrice, Products._.CategoryID == 2);

返回categroyid=2的unitprice合计。 AVG方法

DbSession.Default.Avg(Products._.UnitPrice, Products._.CategoryID == 2);

返回categroyid=2的unitprice的平均值。 COUNT方法

DbSession.Default.Count(Products._.All, Products._.CategoryID == 2);

返回categroyid=2的记录条数。 MAX方法

DbSession.Default.Max(Products._.UnitPrice, Products._.CategoryID == 2);

返回categroyid=2的记录中最大的unitprice。 MIN方法

DbSession.Default.Min(Products._.UnitPrice, Products._.CategoryID == 2);

返回categroyid=2的记录中最小的unitprice。 辅助的方法很少,就这么几个了。 下一节将讲述如何输出组件执行的sql。

数据库组件 Hxj.Data (十)(输出组件执行的sql)

前面有TX留言问分页的sql是怎么样的,看完这篇你也就知道了。 组件可以输出执行的sql,方便查看sql生成的语句是否有问题。 通过注册事件来输出sql

DbSession.Default.RegisterSqlLogger(database_OnLog);

private string sql;

void database_OnLog(string logMsg) {

//保存执行的DbCommand (sql语句和参数) sql += \ + logMsg; }

然后通过执行

DbSession.Default.UnregisterSqlLogger(database_OnLog);

23

来注销注册的事件。 这里是例子是asp.net

DbSession.Default.From()

.InnerJoin(Suppliers._.SupplierID == Products._.SupplierID) .Page(10, 2)

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

执行上面的语句输出的sql语句如下:

SELECT * FROM

( SELECT TOP 10 * FROM

( SELECT TOP 20 [Products].[ProductID],[Products].[ProductName] FROM [Products]

INNER JOIN [Suppliers]

ON ([Suppliers].[SupplierID] = [Products].[SupplierID]) ORDER BY [Products].[ProductID] ASC) AS tempIntable ORDER BY [ProductID] DESC) AS tempOuttable ORDER BY [ProductID] ASC

再来一个

DbSession.Default.From().Where(Products._.CategoryID == 2).ToFirst();

生成的sql语句如下

Text:

SELECT TOP 1 * FROM [Products] WHERE [Products].[CategoryID] = @ae2b9c6a112545e5b56fa6dc70f32ac1

Parameters:

@ae2b9c6a112545e5b56fa6dc70f32ac1[Int32] = 2

这下组件生成的sql语句可以一目了然了,sql语句的输出也大大方便了调试。 下一节将讲述WhereClip(条件)的生成。

数据库组件 Hxj.Data (十一) (where条件)

在前几节的例子中都生成where之后的条件,例如: Products._.CategoryID == 2

代码中这些就是生成条件,对应sql就是 categoryid=2

归根到底这句代码返回回来的是一个WhereClip. WhereClip where = WhereClip.All;

24