SUN認證:JSP、ASP.NET的存儲過程

 在Java中的JSP、JSP+JSTL,.Net中的asp.net結合SQL Server數據庫開發中,把存儲過程使用的常規方法和最簡方式介紹一下。

    本文以SQL Server2000例

    一、在JSP(JSTL)中使用存儲過程:

     1、Java中存儲過程的標準使用方法:

    可實現存儲過程中的各種功能,和最簡方法相比,它可以得到out參數和過程返回值。 ?就是參數的佔位符,一個問號代表有一個參數

     String proc = “{call procname (?,? )}”;
     CallableStatement stat = con.prepareCall(proc);
     //第一個參數為in的話,說明?號應為英文輸入法下的,這個博客不能輸入英文的問號。
     stat.setString(1,’paravalue’);//設置參數值
     //第二個參數作out的話
     stat.registerOutParameter(1,java.sql.Types.VARCHAR);//設置參數類型
     stat.execute();
     String paraValue = stat.getString(2);//得到out參數值

例如:

     <%@page import=“java.sql.*”%>
     <%@page import=“java.text.*”%>
     <%@page contentType=“text/html;charset=GB2312”%>
     <%@include file=“opendata.jsp”%>
     <%
     String strSQL = “{call pdrivertotal( , )}”;
     CallableStatement stmt = con.prepareCall(strSQL);
     stmt.setString(1,“2005-08-20”);
     stmt.setString(2,“2005-10-01”);
     stmt.execute();
     %>

     2、存儲過程的最簡寫法:

    思路:將過程當作普通的sql語句去執行,也就是和查詢、更新的寫法是一樣。可實現執行過程並且得到相關的數據集,但它不能得到

過程的out輸出參數,開發中90%的情況下皆適用。

     String proc = “exec過程名”+參數1+“,”+參數2;
     Statement stat = con.createStatement();
     ResultSet rs = stat.executeQuery(proc);

例如:

     //在JSP中使用
     <%
     Statement stat = con.createStatement();
     ResultSet rs = stat.executeQuery(“zyfproc 20 ’姓名’”);
     //zyfproc為存儲過程名20為int型參數,姓名為varchar類參數
     %>
     //在使用了jstl標籤的jsp中使用
     <!–執行存儲過程–>
     <sql:update var=“proc” sql=“exec jproc ?,?” dataSource=“${ds}”>
     <!–說明?號應為英文輸入法下的,這個博客不能輸入英文的問號。 –>
     <sql:param value=“${param.hid}”/>
     <sql:param value=“${param.sid}”/>
     </sql:update>

    二、在asp.net(C#)中,使用存儲過程:

     1 C#中存儲過程的使用標準版

     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執行類型改為存儲過程方式,默認為Text。
     comm.CommandType=CommandType.StoredProcedure;
     //傳遞一個輸入參數,需賦值
     SqlParameter sp=comm.Parameters.Add(“@uid”,SqlDbType.Int);
     sp.Value=10;
     //定義一個輸出參數,不需賦值。 Direction用來描述參數的類型
     //Direction默認為輸入參數,還有輸出參數和返回值型。
     sp=comm.Parameters.Add(“@output”,SqlDbType.VarChar,50);
     sp.Direction=ParameterDirection.Output;
     //定義過程的返回值參數,過程執行完之後,將把過程的返回值賦值給名為myreturn的Paremeters賦值。
     sp=comm.Parameters.Add(“myreturn”,SqlDbType.Int);
     sp.Direction=ParameterDirection.ReturnValue;
     //使用SqlDataAdapter將自動完成數據庫的打開和關閉過程,並執行相應t-sql語句或存儲過程
     //如果存儲過程只是執行相關操作,如級聯刪除或更新,使用SqlCommand的execute方法即可。
     SqlDataAdapter da=new SqlDataAdapter(comm);
     DataSet ds=new DataSet();
     da.Fill(ds);
     //在執行完存儲過程之後,可得到輸出參數
     string myout=comm.Parameters[“@output”].Value.ToString();
     //打印輸出參數:
     Response.Write(“打印輸出參數:”+myout);
     //打印存儲過程返回值
     myout=comm.Parameters[“myreturn”].Value.ToString();
     Response.Write(“存儲過程返回值:”+myout);
     this.DataGrid1.DataSource=ds;
     this.DataGrid1.DataBind();
     }

2存儲過程的使用最簡版:

     private void sql_jyh()
     {
     //最簡寫法,把存儲過程當作t-sql語句來使用,語法為:exec過程名參數
     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將自動完成數據庫的打開和關閉過程,並執行相應t-sql語句或存儲過程
     //如果存儲過程只是執行相關操作,如級聯刪除或更新,使用SqlCommand的execute方法即可。
     SqlDataAdapter da=new SqlDataAdapter(comm);
     DataSet ds=new DataSet();
     da.Fill(ds);
     //綁定數據
     this.DataGrid1.DataSource=ds;
     this.DataGrid1.DataBind();
     }

    總結,對於SQLServer庫而言,無論用什麼語言,都可以這樣來使用,即當作普通查詢語句。

     string sql=“execute proc_out 10,’12’”;

    把這個sql作為參數,在java或者C#中均能得到正確的執行。這也是使用存儲過程的最簡方法。

This entry was posted in SUN.

发表评论

邮箱地址不会被公开。 必填项已用*标注


*

在线客服系统