现在的位置: 首页 > 综合 > 正文

SQL语句对象化的想法

2012年03月30日 ⁄ 综合 ⁄ 共 1178字 ⁄ 字号 评论关闭

一直在实现.NET下的O/R M组件,但在把SQL条件表达式注入组件的过程中想法生了一些转变。虽然O/R M在某些数据操作上的确很灵活和方便,但对关系和对象的依赖性强;对于一些复杂的查询和统计O/R M不太适合(这只是个人看法)。 
 作为一个数据处理组件它应该能够很好的解决数据处理问题,经过一段时间的思考决定把SQL语句对象化;实现SQL语句在.NET平台下快速调用,O/R M功能作为组件的辅助功能。把SQL语句转成相应的对象在.NET中使用并不是大问题,但使用的方便性和功能支持上是难点。由于前期对组件进行了多次的重构和SQL条件表达式注入实现的一些经验,这次的更改很快就得到了一些成效。

Delete语句对象化后的调用过程
IDelete delete = session.CreateDelete(Orders.TBL);
delete.Expression = Orders.OrderID >10204 & Orders.OrderID<10400;
delete.Execute();

Update语句对象化后的调用过程
IUpdate update = session.CreateDelete(Orders.TBL);
update.Fields = new Field[]{Orders.EmployeeID.Set(2),Orders.OrderDate.Set("2006-1-1")};
update.Expression =Orders.OrderID.in(new object[]{103001,103002});
update.Execute();

Insert语句对象化后的调用过程
IInsert insert = session.CreateInsert(Employees.TBL);
insert.Fields = new Field[]{Employees.FirstName.Set("Fan")
  ,Employees.LastName.Set("henry")
  ,Employees.BrithDay.Set("1978-3-12")};
insert.Execute();

Select语句对象化后的调用过程
IQuery query = session.CreateQuery(Employees.TBL.INNER(Orders.TBL));
query.Selects = new TableField[]{Employees.EmployeeID.at(Employees.TBL)
  ,SqlMath.Count(Orders.ALL.at(Orders.TBL)).As("Account")};
query.GroupBy = new TableField[]{Employees.EmployeeID.at(Employees.TBL)};
query.ExecuteDataSet();

抱歉!评论已关闭.