資料庫應用開發中需撰寫大量 SQL 查詢,手寫易出錯且難維護。參考 Hibernate/Nhibernate 將查詢物件化,大幅提升開發效率與程式碼品質。
QueryCmd:查詢命令物件Expression 派生類:EqExpression、LeExpression、RtExpression、InExpression 等UintType:邏輯運算子(And/Or)IDataSession / DataSessionFactory:資料存取會話using (HFSoft.Data.IDataSession session = HFSoft.Data.DataSessionFactory.OpenSession()) {
session.Open();
HFSoft.Data.QueryCmd query = new QueryCmd("Orders");
query.Expression.Add(new HFSoft.Data.EqExpression("OrderID", 10264));
System.Data.DataSet myDS = session.ExecuteDataSet(query.BuilderCmd(session));
}
生成 SQL:
SELECT * FROM Orders WHERE 1=1 AND (OrderID = @OrderID0)
query.Expression.Add(
new HFSoft.Data.LeExpression("OrderID", 10264),
new HFSoft.Data.RtExpression("OrderID", 10600)
);
生成 SQL:
SELECT * FROM Orders WHERE 1=1 AND (OrderID > @OrderID0) AND (OrderID < @OrderID1)
query.Expression.Add(
new HFSoft.Data.LeExpression("OrderID", 10264),
new HFSoft.Data.RtExpression("OrderID", 10600)
);
query.Expression.Add(
HFSoft.Data.UintType.Or,
new HFSoft.Data.InExpression("OrderID", new int[] { 10601, 10602, 10605 })
);
生成 SQL:
SELECT * FROM Orders WHERE 1=1
AND (OrderID > @OrderID0) AND (OrderID < @OrderID1)
OR (OrderID IN (@OrderID20, @OrderID21, @OrderID22))
ToSql()、GetParameters() 介面@ParamName 並對應值And/Or 串聯多重條件完整原始碼與擴充功能(Join、GroupBy、OrderBy、分頁)正在持續完善中,歡迎交流討論。