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

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:ASP.NET生成高質量縮略圖通用函數(c#代碼)
      在網站開發時,生成縮略圖是一個非常常見和實用的功能.以前在asp里只能借助com組件實現,現在在.net里可以利用框架的強大的類庫輕松實現.下面帖出完整的代碼(帶詳細注釋),參考了網上的一些文章及.

      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查詢生成器中,這個查詢看起來像:

        同樣,它也可能使用SelectQueryBuilder通過創建’嵌套的WHERE子句’來實現。


      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 'Or...' column to level 2
      query.AddWhere("CustomerID",
      Comparison.Equals, "TOMSP", 2);
      // Add the date selection clause
      WhereClause clause =query.AddWhere("OrderDate", Comparison.LessThan,
        new DateTime(2004,6,30), 2);
      // Add a nested clause to the captured clause
      clause.AddClause(LogicOperator.Or,
      Comparison.GreaterThan, new DateTime(2006,1,1));

        注意到我用了一個WhereClause對象,它由AddWhere調用返回。接著調用clause.AddClause創建一個嵌套的子句柄,并且選擇通過指定LogicOperator.Or來把它OR到第一個子句上。所產生的語句如下:


      SELECT Orders.*
      FROM Orders
      WHERE
      (
       (CustomerID = 'VINET')
       AND (OrderDate < '2005/01/01 12:00:00')
      )
      OR
      (
       (CustomerID = 'TOMSP')
       AND (OrderDate < '2004/06/30 12:00:00' OR
       OrderDate > '2006/01/01 12:00:00')
      )

        請注意這個例子中日期包含’12:00:00’,這是因為我在DateTime構造體中忽略了時間。但這只要由于我的習慣。如果我使用new DateTime(2006,1,1,0,0,0),日期字符串將包含’00:00:00’。

        結論

        在介紹中我就提到,SelectQueryBuilder是CodeEngine框架的一部分。這個框架 也包含了DeleteQueryBuilder,UpdateQueryBuilder,InsertQueryBuilder。我在通過我的C#DAL產生器生成的代碼中使用這些生成器。你能從www.code-engine.com上下載一份 框架DLL的拷貝。在這期間我也將發布其它的查詢生成器的源代碼。同時如果你有什么問題,評價或建議,請及時與我聯系。

      分享:asp.net里面的身份驗證和授權
      今天閑著無聊.想起來了ASP.NET身份驗證.感覺良好.貼出下列代碼: login.aspx HTML代碼 <%@ Page language="c#" Codebehind="02Login.aspx.cs" AutoEventWire

      共3頁上一頁123下一頁
      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程