資源描述:
《在.NET中調(diào)用存儲過程》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、因為做項目要用到數(shù)據(jù)庫,因此存儲過程是必不可少的,看了一點如何在.NET中調(diào)用存儲過程的資料,頗有點心得,覺得這個東西是當用到數(shù)據(jù)庫的時候必須要會的一項技術(shù)。下面是它的定義:存儲過程(StoredProcedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中。用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它。存儲過程是數(shù)據(jù)庫中的一個重要對象,任何一個設(shè)計良好的數(shù)據(jù)庫應(yīng)用程序都應(yīng)該用到存儲過程??偟膩碚f,存儲過程具有以下一些優(yōu)點:◆存儲過程允許標準組件式編程◆存儲過程能夠?qū)崿F(xiàn)較快的
2、執(zhí)行速度◆存儲過程能夠減少網(wǎng)絡(luò)流量◆存儲過程可被作為一種安全機制來充分利用?現(xiàn)在我們來看看如何在.NET中調(diào)用存儲過程。?1:無參數(shù)的存儲過程建立存儲過程如下:Uselibrarydatabase//指定所要建的存儲過程的數(shù)據(jù)庫goCreateprocedurep_book//新建存儲過程p_bookAsselect*frombookwhere條形碼='ts100008'//SQL語句集合執(zhí)行編譯之后在數(shù)據(jù)庫的可編程性節(jié)點里面的存儲過程可以看得到!?在VS2005里面新建一個控制臺程序,新建一個方法如下:publicv
3、oidnopara(){SqlConnectioncon=newSqlConnection("server=.;database=librarydatabase;userid=sa;pwd=;");//數(shù)據(jù)庫連接字段SqlCommandcom=newSqlCommand("p_book",con);//調(diào)用存儲過程com.CommandType=CommandType.StoredProcedure;//指定執(zhí)行的類型con.Open();//打開數(shù)據(jù)庫連接try{SqlDataReadersdr=com.Execut
4、eReader();//執(zhí)行存儲過程while(sdr.Read()){Console.WriteLine(sdr[2].ToString());//sdr方括號里面的數(shù)值就是返回記錄的方列,這里是顯示第三列的值,從0開始算}con.Close();//關(guān)閉數(shù)據(jù)庫連接Console.ReadKey();}catch{Console.WriteLine("somethingiswrong");Console.ReadKey();}}此時客戶端就直接調(diào)用該方法即可!??2:有參數(shù)的存儲過程調(diào)用有參數(shù)的存儲過程其實并不復(fù)雜,
5、和類中方法參數(shù)的傳遞相似,只不過存儲過程里面的參數(shù)前必須要有“@”作用!建立存儲過程如下:Uselibrarydatabase//指定所要建的存儲過程的數(shù)據(jù)庫goCreateprocedurelib_reader@namenvarchar(20)//定義一個nvarchar型的參數(shù),注意,用“@”修飾asselect*fromreaderwhere姓名=@name//完整的SQL語句,引用該參數(shù)?執(zhí)行編譯。??再新建一個方法如下:publicvoidhaspara(){SqlConnectioncon=newSqlCo
6、nnection("server=.;database=librarydatabase;userid=sa;pwd=;");//數(shù)據(jù)庫連接字段SqlDataAdaptersda=newSqlDataAdapter("lib_reader",con);//調(diào)用存儲過程,和前一個例子不同,這里用SqlDataAdapter,省去了打開數(shù)據(jù)庫連接!//con.Open();此句可以省去,因為執(zhí)行SqlDataAdapter已經(jīng)打開了連接了SqlParameterpara0=newSqlParameter("@name","張
7、三");//給參數(shù)賦值,注意參數(shù)格式sda.SelectCommand.Parameters.Add(para0);//添加參數(shù)值sda.SelectCommand.CommandType=CommandType.StoredProcedure;//指定執(zhí)行類型為存儲過程try{DataSetds=newDataSet();sda.Fill(ds,"table");foreach(DataRowtherowinds.Tables["table"].Rows){Addr=therow["家庭地址"].ToString()
8、.Trim(); //讀取返回記錄的相應(yīng)字段,Addr必須先聲明為string型才可以使用Tel=therow["電話"].ToString().Trim(); //讀取返回記錄的相應(yīng)字段}Console.WriteLine("家庭地址是:{0},所在系:{1}",password,quanxian);con.Cl