日韩天天综合网_野战两个奶头被亲到高潮_亚洲日韩欧美精品综合_av女人天堂污污污_视频一区**字幕无弹窗_国产亚洲欧美小视频_国内性爱精品在线免费视频_国产一级电影在线播放_日韩欧美内地福利_亚洲一二三不卡片区

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

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

推薦:ASP.NET生成高質(zhì)量縮略圖通用函數(shù)(c#代碼)
在網(wǎng)站開(kāi)發(fā)時(shí),生成縮略圖是一個(gè)非常常見(jiàn)和實(shí)用的功能.以前在asp里只能借助com組件實(shí)現(xiàn),現(xiàn)在在.net里可以利用框架的強(qiáng)大的類庫(kù)輕松實(shí)現(xiàn).下面帖出完整的代碼(帶詳細(xì)注釋),參考了網(wǎng)上的一些文章及.

  你能看到,這種方式比直接使用連接字符串更直觀�?紤]到第一個(gè)例子SQL注入的危險(xiǎn),通過(guò)SelectQueryBuilder建立的SELECT查詢是非常安全的,并不用擔(dān)心使用的TextBoxs中的內(nèi)容。事實(shí)上它也非常簡(jiǎn)單!

  使用SQL函數(shù)

  如果你想在你的查詢中使用SQL函數(shù),你能使用SqlLiteral類來(lái)打包函數(shù)的調(diào)用。說(shuō)明這個(gè)類能作什么的最好方式就是給你顯示一小段代碼例子:


SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Orders");
query.AddWhere("OrderDate", Comparison.LessOrEquals,new SqlLiteral("getDate()"));

  如果我們沒(méi)有打包getDate()函數(shù)調(diào)用到SqlLiteral類中,建立的查詢就會(huì)產(chǎn)生WHERE子句:OrderDate<=’getDate()’。當(dāng)然,我們希望在語(yǔ)句中的這個(gè)函數(shù)沒(méi)有被單引號(hào)包圍。這時(shí)SqlLiteral就可以派上用場(chǎng)了:它直接拷貝字符串到輸出,并沒(méi)有把它格式化成字符串�,F(xiàn)在的輸出WHERE子句應(yīng)當(dāng)是OrderDate<=getDate()!

  查詢中使用JOINs

  要?jiǎng)?chuàng)建到其它表的JOINs,你能使用AddJoin方法。下面的代碼顯示了如何創(chuàng)建一個(gè)從Ordres表到Customers表的INNER JOIN。


SelectQueryBuilder query = new SelectQueryBuilder();
query.SelectFromTable("Orders");
query.AddJoin(JoinType.InnerJoin,"Customers", "CustomerID",Comparison.Equals,"Orders", "CustomerID");
query.AddWhere("Customers.City",Comparison.Equals, "London");

  這段代碼選擇所有居住在London的客戶的訂單。一旦調(diào)用了BuildQuery方法,就會(huì)產(chǎn)生下面的SQL語(yǔ)句:


SELECT Orders.*
FROM Orders
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerID
WHERE (Customers.City = 'London')

  注意到缺省的查詢只會(huì)建立所選擇的表的selects * 語(yǔ)句(這個(gè)例子中的Orders.*)。如果你也想選擇連接表的列的話,你必須得顯式地選擇它們。你能通用調(diào)用query.SelectColumns(“Orders.*”,”Customers.*”)。

  建立計(jì)算查詢

  如果你想對(duì)你的數(shù)據(jù)庫(kù)執(zhí)行一個(gè)計(jì)算查詢。你能使用SelectCount方法如同下面顯示的:

  Query.SelectCount();

  在更加復(fù)雜的計(jì)算查詢中,你可能想使用GROUP BY語(yǔ)句�?匆幌孪旅娴睦�,它顯示了如何使用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);

  上面的代碼選擇了每個(gè)城市的訂單數(shù),并用訂單數(shù)目排序,不考慮來(lái)自制Amsterdam的訂單,BuildQuery方法的輸出結(jié)果應(yīng)當(dāng)是:


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

  復(fù)雜的Where語(yǔ)句

  如果你曾經(jīng)用過(guò)微軟的Access或SQL Server的內(nèi)置的查詢生成器的話,是否驚訝你能建立和代碼一樣的包含多層ANDs和Ors,并沒(méi)有關(guān)心()符號(hào)的位置的查詢?是的?我也能!

  你能使用SelectQueryBuilder類實(shí)現(xiàn)!你能加多層的WHERE語(yǔ)句到你的查詢。缺省,所有對(duì)query.AddWhere的調(diào)用被放在查詢的第一層上。你可以把它比作SQL Server查詢生成器的’Criteria’列;第二、三、四層等相應(yīng)地對(duì)應(yīng)于’Or…’列。

  看一下下面的SQL Server查詢生成器的快照,通過(guò)它我能快速地把簡(jiǎn)單的假的SELECT語(yǔ)句放在一起來(lái):

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

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

來(lái)源:模板無(wú)憂//所屬分類:.Net教程/更新時(shí)間:2008-08-22
相關(guān).Net教程