溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C#中如何使用存儲(chǔ)過(guò)程

發(fā)布時(shí)間:2021-07-07 16:02:14 來(lái)源:億速云 閱讀:250 作者:Leah 欄目:編程語(yǔ)言

這篇文章給大家介紹C#中如何使用存儲(chǔ)過(guò)程,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

要在C#中使用存儲(chǔ)過(guò)程,首先看看test表的創(chuàng)建sql語(yǔ)句:

create table test55  (  uid int identity(1,1),  class1 varchar(20),  class2 varchar(20),  uname varchar(20),  birth smalldatetime,  meno varchar(50)  )   alter table test55  add constraint primary_id primary key(uid)

創(chuàng)建一個(gè)有輸入、輸出、返回值參數(shù)的存儲(chǔ)過(guò)程:

create proc proc_out @uid int,@output varchar(200) output

as

--select結(jié)果集

select * from test where uid>@uid

--對(duì)輸出參數(shù)進(jìn)行賦值

set @output='記錄總數(shù):'+convert(varchar(10),(select count(*) from test))

--使用return,給存儲(chǔ)過(guò)程一個(gè)返回值。

return 200;

go

在C#中使用存儲(chǔ)過(guò)程:

使用帶有參數(shù)的sql語(yǔ)句

private void sql_param()    {     SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=1234;database=china");        //在sql語(yǔ)句當(dāng)中引入了@myid參數(shù)    string sql="select * from test where uid>@myid";    SqlCommand comm=new SqlCommand(sql,conn);               //使用comm的Parameters屬性的add方法,對(duì)上述的@myid參數(shù)進(jìn)行定義和賦值    //SqlDbType類提供了與SqlServer數(shù)據(jù)類型一致的數(shù)據(jù)庫(kù)類型    SqlParameter sp=comm.Parameters.Add("@myid",SqlDbType.Int);    sp.Value=10;//對(duì)輸入?yún)?shù)賦值          //Command對(duì)象默認(rèn)的執(zhí)行方式為Text,不寫(xiě)下句亦可    comm.CommandType=CommandType.Text;        //將Command對(duì)象作為DataAdapter的參數(shù)傳進(jìn)    SqlDataAdapter da=new SqlDataAdapter(comm);    DataSet ds=new DataSet();    da.Fill(ds);           //綁定數(shù)據(jù)到DataGrid1控件上    this.DataGrid1.DataSource=ds;    this.DataGrid1.DataBind();       }

存儲(chǔ)過(guò)程的使用標(biāo)準(zhǔn)版  

private void sql_proc()     {            SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=1234;database=china");      string sql="proc_out";      SqlCommand comm=new SqlCommand(sql,conn);           //把Command執(zhí)行類型改為存儲(chǔ)過(guò)程方式,默認(rèn)為Text。      comm.CommandType=CommandType.StoredProcedure;       //傳遞一個(gè)輸入?yún)?shù),需賦值      SqlParameter sp=comm.Parameters.Add("@uid",SqlDbType.Int);      sp.Value=10;       //定義一個(gè)輸出參數(shù),不需賦值。Direction用來(lái)描述參數(shù)的類型      //Direction默認(rèn)為輸入?yún)?shù),還有輸出參數(shù)和返回值型。      sp=comm.Parameters.Add("@output",SqlDbType.VarChar,50);      sp.Direction=ParameterDirection.Output;       //定義過(guò)程的返回值參數(shù),過(guò)程執(zhí)行完之后,將把過(guò)程的返回值賦值給名為myreturn的Paremeters賦值。      sp=comm.Parameters.Add("myreturn",SqlDbType.Int);      sp.Direction=ParameterDirection.ReturnValue;           //使用SqlDataAdapter將自動(dòng)完成數(shù)據(jù)庫(kù)的打開(kāi)和關(guān)閉過(guò)程,并執(zhí)行相應(yīng)t-sql語(yǔ)句或存儲(chǔ)過(guò)程      //如果存儲(chǔ)過(guò)程只是執(zhí)行相關(guān)操作,如級(jí)聯(lián)刪除或更新,使用SqlCommand的execute方法即可。      SqlDataAdapter da=new SqlDataAdapter(comm);      DataSet ds=new DataSet();      da.Fill(ds);                //在執(zhí)行完存儲(chǔ)過(guò)程之后,可得到輸出參數(shù)       string myout=comm.Parameters["@output"].Value.ToString();           //打印輸出參數(shù):      Response.Write("打印輸出參數(shù):"+myout);       //打印存儲(chǔ)過(guò)程返回值      myout=comm.Parameters["myreturn"].Value.ToString();      Response.Write("存儲(chǔ)過(guò)程返回值:"+myout);       this.DataGrid1.DataSource=ds;      this.DataGrid1.DataBind();       }

存儲(chǔ)過(guò)程的使用最簡(jiǎn)版: 

private void sql_jyh()     {      //最簡(jiǎn)寫(xiě)法,把存儲(chǔ)過(guò)程當(dāng)作t-sql語(yǔ)句來(lái)使用,語(yǔ)法為:exec 過(guò)程名 參數(shù)      SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=1234;database=china");     string sql="execute proc_out 10,'12'";     SqlCommand comm=new SqlCommand(sql,conn);         //使用SqlDataAdapter將自動(dòng)完成數(shù)據(jù)庫(kù)的打開(kāi)和關(guān)閉過(guò)程,并執(zhí)行相應(yīng)t-sql語(yǔ)句或存儲(chǔ)過(guò)程     //如果存儲(chǔ)過(guò)程只是執(zhí)行相關(guān)操作,如級(jí)聯(lián)刪除或更新,使用SqlCommand的execute方法即可。     SqlDataAdapter da=new SqlDataAdapter(comm);     DataSet ds=new DataSet();     da.Fill(ds);         //綁定數(shù)據(jù)     this.DataGrid1.DataSource=ds;     this.DataGrid1.DataBind();         }

總結(jié)與理解

SqlCommand類,提供了對(duì)t-sql語(yǔ)句和存儲(chǔ)過(guò)程的執(zhí)行能力;它不只能執(zhí)行某一個(gè)sql語(yǔ)句,亦可執(zhí)行一組sql語(yǔ)句,如創(chuàng)建表,修改表等,可以這樣理解,對(duì)于sql server而言,只要在查詢分析器中可執(zhí)行的一組語(yǔ)句,通過(guò)SqlCommand同樣能得到很好的執(zhí)行。SqlCommand默認(rèn)執(zhí)行方式,是執(zhí)行t-sql語(yǔ)句,即comm.CommandType=CommandType.Text。在執(zhí)行存儲(chǔ)過(guò)程時(shí),可以用"exec 過(guò)程名 參數(shù)"的形式,將其作為t-sql語(yǔ)句,來(lái)執(zhí)行,也可以將SqlCommand的執(zhí)行方式改為執(zhí)行過(guò)程方式,即comm.CommandType=CommandType.StoredProcedure;兩種執(zhí)行存儲(chǔ)過(guò)程方式的主要區(qū)別是,前者在獲得輸出參數(shù)和返回值上,很困難;后者是全面的,也是微軟專門為執(zhí)行存儲(chǔ)過(guò)程而定義的全面策略。

關(guān)于C#中如何使用存儲(chǔ)過(guò)程就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI