ExecuteScalar方法
oRs.Open “SELECT COUNT(*) As iRowCountFROMOrders”
iCount=oRs.Fields(“iRowCount”).Value
ADO.NET引入了一種從查詢的結果中獲取單值的新方式,可以用于預計只返回一行和一列的場合。ADO.NETCommand對象有一個ExecuteScalar方法,它從相關的查詢中返回第一行和第一列的值。因為不用創建行集、查找值并關閉行集,所以這樣所產生的系統開銷非常小。ExecuteScalar方法已經針對需要檢索單值的特定場合進行了優化。下例實現的功能與前例相同,只不過使用的是ASP.NET和ADO.NET以及ExecuteScalar方法:
string sSql = “SELECTCOUNT(*) As iRowCountFROMOrders”;
SqlCommandoCmd=newSqlCommand(sSql,oCn);
oCmd.CommandType = CommandType.Text;
int iCount = (int)oCmd.ExecuteScalar();
檢索單值的另一種方式是使用存儲過程的輸出參數。例如,這一技術也可以從一個單行中檢索許多值。它在ADO和ADO.NET中都適用,雖然ADO.NET已經擴展了輸出參數的功能。在ADO.NET中為了從Command對象獲取輸出變量的值,應該使用ExecuteNonQuery方法執行查詢。該方法能夠通知ADO.NET,查詢不會返回一個行集,因此避免了DataSet或者DataReader的系統開銷:
oCmd.ExecuteNonQuery();
oCmd.UpdatedRowSource=UpdateRowSource.OutputParameters;
intiOrderID=(int)oCmd.Parameters[“@OrderID”].Value;
此段代碼將UpdatedRowSource屬性設置為指向輸出參數(假定它們已經進行了設置),然后就可以檢索輸出值了。在傳統的ADO中這是在Connection對象的Execute方法中使用晦澀難懂的參數實現的,而我們可以看到,在ADO.NET中實現這一點已經非常簡單了。當然,ADO.NET還有一個為返回標準行集進行了優化的方法—Command對象的Execute方法。在傳統的ADO中,Recordset對象能夠設置UPDATE、INSERT和DELETE語句,這些語句是為了使Recordset能夠將對自己的任何更改應用于基礎數據庫所必需的。雖然這一功能非常方便,但因為必須要返回給數據庫以決定如何實現,所以,它也增加了系統開銷。ADO.NET對象通過CommandBuilder對象也可以實現這一點;但同樣也存在著系統開銷的問題。在大多數開發場景中,要求使用的確切SELECT、INSERT、UPDATE和DELETE語句在設計時是已知的。在傳統的ADO中,沒有什么簡單的辦法將操作查詢與Recordset相關聯從而來使用它們。而在ADO.NET中,DataAdapter有四個不同的Command對象與其相關聯,可以表示每個操作查詢以及SELECT語句。這使DataAdapter能夠協助我們用查詢的結果填充一個DataSet,還能提前通知DataAdapter對數據庫發出操作查詢。雖然這需要在設計時投入更多的編碼工作,但是代碼的增加換來的是性能上的改善(就更不用說代碼易于理解所帶來的維護上的輕松了)。
總結
以上是生活随笔為你收集整理的ExecuteScalar方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何用手机在淘宝找相似的商品
- 下一篇: MYSQL mediumText大字段存