`
njmnjx
  • 浏览: 232280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多
本文来自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'



结果如下




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();

结果如下:




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
  • 大小: 55.9 KB
  • 大小: 64 KB
分享到:
评论

相关推荐

    存储过程实例解释 事务实例解释 C#中使用带返回值的存储过程

    简单的存储过程 如何在ASP.NET中调用这个存储过程 带参数的存储过程 如何在ASP.NET中调用这个带参数的存储过程 如何根据传入的参数判断执行哪条SQL语句 C#中使用带返回值的存储过程 SqlServer存储过程的事务处理

    C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGIN SELECT @studentname=...

    C#WinForm获取子窗口返回值

    C#WinForm获取子窗口返回值 及窗口取消的处理

    JAVA&C#调用存储过程代码

    JAVA&C#调用存储过程代码 各种情况都涉及到.老鸟就别下了 相信对新手有帮助

    C# Winform 窗体传值及接收返回值

    C# Winform 窗体传值及接收返回值 通过构造传值 通过属性传值

    C# winform调用SQL存储过程-菜鸟入门 详细注释

    内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...

    C# URL访问和获取返回值

    C# URL访问和获取返回值的一个简单函数

    RSA加密JAVA转C# JAVA转PHP,C#转JAVA

    rsa秘钥转换工具,可以java转成C#格式也可以C#转成java格式,也可以java转换为PHP格式,绝对可以使用,打开提示错误请安装.netframework

    C# To JAVA Converter v17.10.6

    C# To Java converter是一款将C#代码片段或者C#项目转换为JAVA的工具。 转换所有版本的C#代码 评估所有引用的程序集和.NET项目,以便更完整地解析外部引用 许多转换和格式化选项 将C#代理和lambdas转换为Java接口...

    Java to C# Converter

    试用演示版的Java文件夹转换到C#转换器2000行的代码片段转换到200行一次。 官方网站 http://www.tangiblesoftwaresolutions.com/ 有需要其他转换器的可以给我留言,我可以帮你破解. Instant C# converts VB code to...

    使用C#代码获取存储过程返回值

    主要介绍了使用C#代码获取存储过程返回值,需要的朋友可以参考下

    C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)

    C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)C#编程 数据库操作应用 在存储过程中使用...

    C#中调用Oracle存储过程

    C#中调用Oracle存储过程

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

    java Socket与C#通信中中文乱码问题的解决方案

    近正在做一个项目,其中遇到了一个问题是java与.NET之间的通信问题。具体的问题是这样的:  客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端...

    C# to Java 代码转换工具

    一个很强大的工具, 能将c#代码片段、文件甚至工程直接转换成java代码,并能彻底解决外部引用的DLL问题,最强的是支持c#工程的直接转换,生成的Java代码质量也很不错。软件已破解,去除了未注册版最多只能转换1000行的...

    C#存储过程的细致使用+接收sql的返回值

    一套学员量话管理 内涵数据库存储过程的详细使用 和返回值的接受 存储过程的的细致使用 给你打开思路 对每个对象有细致的划分

    C#调用Java接口演示

    C#调用Java接口演示

Global site tag (gtag.js) - Google Analytics