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