用C#、JAVA一次性取出存储过程中的各种返回值

系统 1275 0
本文来自CSDN博客http://blog.csdn.net/liushengmz/archive/2010/04/29/5541986.aspx

问题:在存储过程中,有时会遇到比较变态的东西,如一个存储过程中有output返回值,有return返回值,还有查询的返回值TABLE,遇到这样的存储过程真是郁闷,一次性把所有的返回值取出来还真的有点麻烦。

1、  首先来看这个存储过程吧
    CREATE  PROCEDURE ParaTest

@paraout varchar(20) output

AS 

BEGIN

   SET NOCOUNT ON

   SELECT * FROM USERS

   SELECT @paraout = 'outputvalue'   

   RETURN 10

END
  



为了方便大家看得更加清清楚楚,我已经将数据赋值写得很直观的了。USERS是一个表

在sql中要取得这个存储过程的返回值可以用以下方式
    DECLARE @paraoutput varchar(20)

DECLARE @parareturn varchar(20)

EXEC @parareturn= ParaTest @paraout = @paraoutput output

SELECT @paraoutput AS 'output',@parareturn AS 'return'
  



结果如下

用C#、JAVA一次性取出存储过程中的各种返回值


2、  用C#取得返回值的方法如下(不做解释了,很简单的)

       
     string stroutput = "";

            string strreturn = "";



            string conStr = "Server=.;DataBase=Test;Uid=sa;Pwd=";            

            SqlConnection conn = new SqlConnection(conStr);

            conn.Open();           

            SqlCommand cmd = new SqlCommand("ParaTest",conn);

            cmd.CommandType = CommandType.StoredProcedure;



            SqlParameter spa = new SqlParameter("@paraout",SqlDbType.VarChar,20);

            spa.Direction = ParameterDirection.Output;

            cmd.Parameters.Add(spa);



            SqlParameter spareturn = new SqlParameter("@return", SqlDbType.VarChar,10);

            spareturn.Direction = ParameterDirection.ReturnValue;

            cmd.Parameters.Add(spareturn);



            cmd.ExecuteNonQuery();

            stroutput = cmd.Parameters["@paraout"].Value.ToString();

            strreturn = cmd.Parameters["@return"].Value.ToString();

            DataTable dt = new DataTable();



            SqlDataAdapter sda = new SqlDataAdapter(cmd);

            sda.Fill(dt);



            Text_ParaReturn.Text = "output value:" + stroutput + ";return value:" + strreturn;

            dgv_ParaSet.DataSource = dt;


            sda.Dispose();

            cmd.Dispose();

            conn.Dispose();
  

结果如下:

用C#、JAVA一次性取出存储过程中的各种返回值


3、  JAVA取得返回值的方法如下

    public static void main(String[] args)

    {

        new com.microsoft.sqlserver.jdbc.SQLServerDriver();

        String strOutput = "";

        String strReturn = "";

        Connection conn = null;

        CallableStatement cstmt = null;

        ResultSet rs = null;

    String conUrl = "jdbc:sqlserver://localhost:1433;DatabaseName=Test;User=sa;pwd=";

        try

        {

            conn = DriverManager.getConnection(conUrl); 

            cstmt = conn.prepareCall("{ ? = call ParaTest( ? ) }");

            cstmt.registerOutParameter(1,Types.VARCHAR);

            cstmt.registerOutParameter(2,Types.VARCHAR);

            rs = cstmt.executeQuery();

            while(rs.next())

            {

                System.out.println(rs.getInt(1) + "---" + rs.getString(2));

            }

            strReturn = cstmt.getString(1);

            strOutput = cstmt.getString(2);         

            System.out.println("OutPut:" + strOutput+"---Return:"+strReturn);               rs.close();

            cstmt.close();

            conn.close();

        }

        catch(Exception ex)

        {

            ex.printStackTrace();

        }

    }
  

结果如下:

1---fsdaf

2---f

3---sd

OutPut:outputvalue---Return:10



4、  备注:

在上面的代码中,用C#取返回值的时候,其实它是执行了两次存储过程的,cmd.ExecuteNonQuery();这里执行一次,sda.Fill(dt);也执行了一次。而JAVA代码取得返回值中,它仅仅只是招行了一次存储过程,就拿到了全部的数据,JAVA主要是使用了游标进行取数据,而C#是一次性取来放到DATATABLE这个容器里面去,中间C#帮我们做了一次数据提取,估计也是用游标取得的数据。不管怎样,终究是取到所有数据了。


本文来自CSDN博客http://blog.csdn.net/liushengmz/archive/2010/04/29/5541986.aspx

用C#、JAVA一次性取出存储过程中的各种返回值


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论