程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 在C#中建立復雜的、靈活的SQL查詢/命令(3)

在C#中建立復雜的、靈活的SQL查詢/命令(3)

編輯:關於C語言

建立計算查詢

如果你想對你的數據庫執行一個計算查詢。你能使用SelectCount方法如同下面顯示的:

Query.SelectCount();

在更加復雜的計算查詢中,你可能想使用GROUP BY語句。看一下下面的例子,它顯示了如何使用GroupBy和AddHaving方法。

SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectColumns("count(*) AS Count", "ShipCity");
query.SelectFromTable("Orders");
query.GroupBy("ShipCity");
query.AddHaving("ShipCity", Comparison.NotEquals, "Amsterdam");
query.AddOrderBy("count(*)", Sorting.Descending);

上面的代碼選擇了每個城市的訂單數,並用訂單數目排序,不考慮來自制Amsterdam的訂單,BuildQuery方法的輸出結果應當是:

SELECT count(*) AS Count, ShipCity
FROM Orders
GROUP BY ShipCity
HAVING (ShipCity <> 'Amsterdam')
ORDER BY count(*) DESC

復雜的Where語句

如果你曾經用過微軟的Access或SQL Server的內置的查詢生成器的話,是否驚訝你能建立和代碼一樣的包含多層ANDs和Ors,並沒有關心()符號的位置的查詢?是的?我也能!

你能使用SelectQueryBuilder類實現!你能加多層的WHERE語句到你的查詢。缺省,所有對query.AddWhere的調用被放在查詢的第一層上。你可以把它比作SQL Server查詢生成器的’Criteria’列;第二、三、四層等相應地對應於’Or…’列。

看一下下面的SQL Server查詢生成器的快照,通過它我能快速地把簡單的假的SELECT語句放在一起來:

如你看到的,我創建一個查詢,它選擇所有在1-1-2005日期之前的客戶’VINET’的訂單,和所有30-6-2004日期之前或1-1-2006日期之後的客戶’TOMSP’的訂單(請不要問為什麼有人想查詢某個人的訂單,這僅僅是一個 例子)。這個查詢能夠建立:

SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Orders");
// Add 'Criteria' column to level 1
query.AddWhere("CustomerID", Comparison.Equals,"VINET", 1);
query.AddWhere("OrderDate", Comparison.LessThan,new DateTime(2005,1,1), 1);
// Add first 'Or...' column to level 2
query.AddWhere("CustomerID", Comparison.Equals, "TOMSP", 2);
query.AddWhere("OrderDate", Comparison.LessThan,new DateTime(2004,6,30), 2);
// Add second 'Or...' column to level 3
query.AddWhere("CustomerID", Comparison.Equals,"TOMSP", 3);
query.AddWhere("OrderDate", Comparison.GreaterThan,new DateTime(2006,1,1), 3);

當調用 BuildQuery時,所有定義的層將被OR到一起,幾乎和SQL Server生成的一樣。

如果你到所產生的語句接近一樣時,想讓查詢更復雜,你可能會說“我的放兩個隨後的語句一起放在一個語句中,在兩個日期間使用OR”。你能夠這樣作。在SQL Server查詢生成器中,這個查詢看起來像:

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved