對(duì)比JSP和ASP.NET的存儲(chǔ)過(guò)程
在Java中的JSP、JSP+JSTL,.Net中的ASP.NET結(jié)合Sql Server數(shù)據(jù)庫(kù)開發(fā)中,把存儲(chǔ)過(guò)程使用的常規(guī)方法和最簡(jiǎn)方式介紹一下。
本文以SQL Server 2000例
一、在JSP(JSTL)中使用存儲(chǔ)過(guò)程:
1、Java中過(guò)儲(chǔ)過(guò)程的標(biāo)準(zhǔn)使用方法:
可實(shí)現(xiàn)存儲(chǔ)過(guò)程中的各種功能,和最簡(jiǎn)方法相比,它可以得到out參數(shù)和過(guò)程返回值?!埃俊本褪菂?shù)的占位符,一個(gè)問(wèn)號(hào)代表有一個(gè)參數(shù)。
String proc = "{call procname (?,? )}"; |
2、存儲(chǔ)過(guò)程的最簡(jiǎn)寫法:
思路:將過(guò)程當(dāng)作普通的sql語(yǔ)句去執(zhí)行,也就是和查詢、更新的寫法是一樣??蓪?shí)現(xiàn)執(zhí)行過(guò)程并且得到相關(guān)的數(shù)據(jù)集,但它不能得到過(guò)程的out輸出參數(shù),開發(fā)中90%的情況下皆適用。
String proc = "exec 過(guò)程名 "+參數(shù)1+","+參數(shù)2; |
例如:
//在JSP中使用 |
#p#
二、在ASP.NET(C#)中,使用存儲(chǔ)過(guò)程:
1 C#中存儲(chǔ)過(guò)程的使用標(biāo)準(zhǔn)版
{
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ù)的打開和關(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();
}
2 存儲(chǔ)過(guò)程的使用最簡(jiǎn)版:
private void sql_jyh() |
總結(jié),對(duì)于SQL Server庫(kù)而言,無(wú)論用什么語(yǔ)言,都可以這樣來(lái)使用,即當(dāng)作普通查詢語(yǔ)句。
string sql="execute proc_out 10,'12'";
把這個(gè)sql作為參數(shù),在java或者C#中均能得到正確的執(zhí)行。這也是使用存儲(chǔ)過(guò)程的最簡(jiǎn)方法。
【編輯推薦】