描述ADO .NET命令影響數據源說明
通過ADO .NET中瀏覽數據的方式并不是在ADO .NET命令中的方式,你仍需要創建鏈接,發送命令。在本文中,提到了表示直接SQL命令的類,你可以使用它們執行存儲過程。
你應當將存儲過程的名字指定為SqlCommand對象的命令文本。命令文本可以通過SqlCommand的構造函數或通過CommandText屬性指定。在下面的示例代碼中,存儲過程的名字是byroyalty。
為幫助SqlCommand辨認出將執行的命令是一個存儲過程,應當將CommandType屬性設置為特定的值。
- SqlCommand cmd = new SqlCommand("byroyalty", conn);
- cmd.CommandType = CommandType.StoredProcedure;
- SqlParameter par = new SqlParameter("@percentage", SqlDbType.Int);
- par.Direction = ParameterDirection.Input;
- par.Value = 15;
- cmd.Parameters.Add(par);
- SqlDataReader dr = cmd.ExecuteReader();
它是在CommandType枚舉值(即可以在ADO .NET命令中使用的所有可以得到的命令類型)中的一個值。存儲過程可能需要一個或多個參數才能運行。在這種情況下,你需要使用SqlParameter類定義參數。
參數具有@前綴名,并是與SQL Server兼容的類型。另外,它還要有一個方向:輸入,輸出還是兩種都有,當然它得是一個值。.NET 類型系統不同于SQL Server類型系統,你必須求助于SqlDbType枚舉列表得到正確的類型。例如,下面的片斷對.NET32位整型求值。
一條命令在過一定時間后就會超時。如果你知道要經過很長的操作,你就可能希望設置這種限制。象ADO中那樣,檢查的屬性是CommandTimeout,其默認值是30秒。與ADO不同,ADO .NET使你可通過CommandBehavior枚舉指定命令的期望行為。
這樣的值指定了對結果的描述,并指定查詢如何影響數據源。在β1版本中,可以為每個命令設置CommandBehavior屬性。從β2版開始,只能使用CommandBehavior枚舉值作為ExecuteReader的參數。
對于其它選項,你可以使用查詢命令限制獲得的關鍵字和結構信息。在這種情況下,命令執行時不會對選擇的行進行鎖定。這種行為是由KeyInfo標記設定的。作為可選項,可能只需得到列信息,而不通過加鎖影響數據庫的狀態。這個選項是SchemaOnly。
另一個選項,SingleResult,使你能夠指定只返回一個結果集,而不論命令可以得到多少個結果集。在這種情況下,命令只返回找到的***個結果集。第四個選項是CloseConnection,它強迫SqlDataReader對象與一個查詢命令聯結起來,以期望在Close方法的***一步自動關閉鏈接。#t#
先前提到過,在ADO .NET命令中不支持服務器指針。如果需要使用服務器指針,并且負擔不起在沒有它的情況下重建應用程序,唯一的辦法是通過ADO對象。要這樣做,需要導入ADODB類型庫,為不同的對象創建恰當的.NET封裝,然后與它們連接起來。然而,在這種情況下,你無法利用ADO .NET的優勢。
這樣做原因很簡單。服務器指針必須與數據庫服務器的底層行為相適應。當處于鏈接時,并不是所有的DBMS以同樣的方式工作。這樣不同特性的對數據庫不可知的實現已經證明是非常困難的。為了避免出現更進一步的問題,ADO .NET命令沒有為服務器指針暴露通用的類,從而從根本上消除了這種問題。
然而,用于SQL Server的管理提供者在將來的發行版中將支持服務器指針,其它類型的管理提供者也會發生同樣的事情。因此,ADO .NET對服務器指針支持的***回答是,它將提供支持,但是將通過其實現與底層工作方式非常匹配的類以一種嚴格的完全DBMS方式(提供支持)。