使用VB.Net写一个简单的数据访问层:T-Sql函数的支持。
2008-10-30 12:46
429 查看
为了支持不同的数据源,数据访问层,就不能简单的创建不同的Command,Conection,DataAdapter对象。根据不同的数据源进行不同的t-sql语句转换,下面我们就来看看数据层对函数的支持。
Abs
Abs
DimoAsNewCommon.主表_Operate DimitemAsNewCommon.主表 DimcommandAsICommand=o.SQL.Saclar(item._库存量.Abs).From(item) Console.WriteLine("ABS语句:{0}",command.CommandText) DimvalueAsObject=o.ExecuteScalar(command) Console.WriteLine("绝对值:{0}",value)
红色部份就是对应的Sql语句。获取库存量的绝对值,并返回第一行第一列的值。
AsName,Sum
DimoAsNewCommon.主表_Operate
DimitemAsNewCommon.主表
DimcommandAsICommand=o.SQL.Saclar(o.SQL.AsName(item._库存金额.Sum,"库存总金额")).From(item)
Console.WriteLine("ASName语句:{0}",command.CommandText)
DimvalueAsObject=o.ExecuteScalar(command)
对库存金额求和,返回的列名,是库存总金额。
Avg
DimoAsNewCommon.主表_Operate
DimitemAsNewCommon.主表
DimcommandAsICommand=o.SQL.Saclar(item._库存量.Avg).From(item)
Console.WriteLine("Avg语句:{0}",command.CommandText)
DimvalueAsObject=o.ExecuteScalar(command)
Console.WriteLine("平均值:{0}",value)
对库存量求平均值
Bracket,Count
DimoAsNewCommon.主表_Operate
DimitemAsNewCommon.主表
DimcommandAsICommand=o.SQL.Saclar(item._库存量.Count).From(item)._
WHERE(o.SQL.Bracket(item._物品型号.EqualTo("aa").And(item._物品名称.EqualTo("bb"))._
Or(o.SQL.Bracket(item._生产厂家.EqualTo("cc").And(item._单位.EqualTo("11")))_
)_
)_
)
Console.WriteLine("Bracket:{0}",command.CommandText)
DimvalueAsObject=o.ExecuteScalar(command)
Console.WriteLine("Bracket:{0}",value)
这个主要针对条件优先级的调整。相当于sqlserver,access中的括号,上面原始的sql语句是。
selectcount(库存量)fromitemwhere(物品型号='aa'and物品名称='bb')
or(生产厂家='cc'and单位='11')
唯一不好的地方,是感觉括号太多了,不知道有没有什么办法。
Day
DimoAsNewCommon.进仓_Operate
DimitemAsNewCommon.进仓
DimcommandAsICommand=o.SQL.Saclar(item._日期.Day).From(item)
Console.WriteLine("Day:{0}",command.CommandText)
DimvalueAsObject=o.ExecuteScalar(command)
Console.WriteLine("Day:{0}",value)
Exists
DimoAsNewCommon.主表_Operate
DimitemAsNewCommon.主表
DimjAsNewCommon.进仓
DimcommandAsICommand=o.SQL.Saclar(item._物品型号.Count()).From(item)._
WHERE(o.SQL.Exists(item._ID.NotEqualTo(j._主表ID),j))
Console.WriteLine("Exists:{0}",command.CommandText)
DimvalueAsObject=o.ExecuteScalar(command)
Console.WriteLine("Exists:{0}",value)
针对Exists语句的支持。原始的t-sql语句是:
selectcount(物品型号)fromitem
whereexists(select1from进仓whereitem.id<>进仓.主表id)