在開發數據庫應用的過程難免會編寫大量的SQL語句,其中大部份是查詢語句;為不同情況編寫查詢語句是一件很煩瑣的事件。用過hibernate或Nhibernate會了解到把SQL查詢語句對象化後使用起非常方便和快捷;也大大減少在編寫查詢SQL語句所帶來的錯誤等問題。
前段時間在編寫一個數據處理類的時候同樣遇到這個問題,經過一段時間思考和設計現實現了SQL查詢語句對象化的功能;在這裡我把自己小小的成果共享一下。
在講解前先看幾個例子(數據是SQLServer的Northwind)注意:例子中所涉及的除查詢對象化外還包含整個數據處理類的使用,那部分還在設計和完善當中。
1)以上語句是查詢訂單ID為10264的訂單信息
using(HFSoft.Data.IDataSession session = HFSoft.Data.DataSessionFactory.OpenSession())
{
session.Open();
HFSoft.Data.QueryCmd query = new QueryCmd("Orders");
query.Expreesion.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)
2)以上語句是查詢訂單ID大於10264並且小於10600的訂單信息
using(HFSoft.Data.IDataSession session = HFSoft.Data.DataSessionFactory.OpenSession())
{
session.Open();
HFSoft.Data.QueryCmd query = new QueryCmd("Orders");
query.Expreesion.Add( new HFSoft.Data.LeExpression("OrderID",10264),
new HFSoft.Data.RtExpression("OrderID",10600));
System.Data.DataSet myDS = session.ExecuteDataSet(query.BuilderCmd(session));
}
對象生成的SQL語句:
SELECT * FROM Orders where 1=1 And (OrderID > @OrderID0) And (OrderID < @OrderID1)
4)以上語句是查詢訂單ID大於10264並且小於10600或編號是10601,10602,10605的訂單信息
using(HFSoft.Data.IDataSession session = HFSoft.Data.DataSessionFactory.OpenSession())
{
session.Open();
HFSoft.Data.QueryCmd query = new QueryCmd("Orders");
query.Expreesion.Add( new HFSoft.Data.LeExpression("OrderID",10264),
new HFSoft.Data.RtExpression("OrderID",10600));
query.Expreesion.Add(HFSoft.Data.UintType.Or,new HFSoft.Data.InExpression("OrderID",new int[]{10601,10602,10605}));
System.Data.DataSet myDS = session.ExecuteDataSet(query.BuilderCmd(session)); }
對象生成的SQL語句:
SELECT * FROM Orders where 1=1 And (OrderID > @OrderID0) And (OrderID < @OrderID1) Or (OrderID in (@OrderID20,@OrderID21,@OrderID22))
從上面的例子我們可以看到對不同的條件進行數據查詢只是一件很簡單的事情,你並不用為不同的查詢情況寫相應SQL語句。
接下來講術這個查詢對象實現,對象的