詳談使用ADO .NET存儲過程
#T#關于存儲過程我想大家知道很多了吧,在這里我就不詳細的介紹了,現(xiàn)在我們來看看如何在ADO.NET中使用它了。調用ADO .NET存儲過程只與常規(guī)SQL語句稍微不同。你應當將ADO.NET存儲過程的名字指定為SqlCommand對象的命令文本。命令文本可以通過SqlCommand的構造函數(shù)或通過CommandText屬性指定。在下面的示例代碼中,存儲過程的名字是byroyalty.
- 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();
為幫助SqlCommand辨認出將執(zhí)行的命令是一個ADO.NET存儲過程,應當將CommandType屬性設置為特定的值。
CommandType.StoredProcedure
它是在CommandType枚舉值(即可以在ADO .NET中使用的所有可以得到的命令類型)中的一個值。存儲過程可能需要一個或多個參數(shù)才能運行。在這種情況下,你需要使用SqlParameter類定義參數(shù)。參數(shù)具有@前綴名,并是與SQL Server兼容的類型。另外,它還要有一個方向:輸入,輸出還是兩種都有,當然它得是一個值。。NET 類型系統(tǒng)不同于SQL Server類型系統(tǒng),你必須求助于SqlDbType枚舉列表得到正確的類型。例如,下面的片斷對。NET32位整型求值。
SqlDbType.Int
SqlCommand 類擁有Parameters集合,此集合為SQL命令的占位符和存儲過程是定義的所有參數(shù)存儲實際的值。要向集合中增加參數(shù),只需調用add方法。注意,如果你以SQL Server管理提供者或用于OLE DB .NET提供者的位置標記為目標,那么在命令命令文本中你必須使用已命名的參數(shù)。存儲過程的輸出然后通過你所使用的ExecuteXXX方法提供的接口進行管理。
SqlCommand 屬性
一條命令在過一定時間后就會超時。如果你知道要經(jīng)過很長的操作,你就可能希望設置這種限制。象ADO中那樣,檢查的屬性是CommandTimeout,其默認值是30秒。與ADO不同,ADO .NET使你可通過CommandBehavior枚舉指定命令的期望行為。這樣的值指定了對結果的描述,并指定查詢?nèi)绾斡绊憯?shù)據(jù)源。在β1版本中,可以為每個命令設置CommandBehavior屬性。從β2版開始,只能使用CommandBehavior枚舉值作為ExecuteReader的參數(shù)。對于其它選項,你可以使用查詢命令限制獲得的關鍵字和結構信息。在這種情況下,命令執(zhí)行時不會對選擇的行進行鎖定。這種行為是由KeyInfo標記設定的。
作為可選項,可能只需得到列信息,而不通過加鎖影響數(shù)據(jù)庫的狀態(tài)。這個選項是SchemaOnly.另一個選項,SingleResult,使你能夠指定只返回一個結果集,而不論命令可以得到多少個結果集。在這種情況下,命令只返回找到的第一個結果集。第四個選項是CloseConnection,它強迫 SqlDataReader對象與一個查詢命令聯(lián)結起來,以期望在Close方法的最后一步自動關閉鏈接。