本文来自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
分享到:
相关推荐
简单的存储过程 如何在ASP.NET中调用这个存储过程 带参数的存储过程 如何在ASP.NET中调用这个带参数的存储过程 如何根据传入的参数判断执行哪条SQL语句 C#中使用带返回值的存储过程 SqlServer存储过程的事务处理
本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGIN SELECT @studentname=...
C#WinForm获取子窗口返回值 及窗口取消的处理
JAVA&C#调用存储过程代码 各种情况都涉及到.老鸟就别下了 相信对新手有帮助
C# Winform 窗体传值及接收返回值 通过构造传值 通过属性传值
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
C# URL访问和获取返回值的一个简单函数
rsa秘钥转换工具,可以java转成C#格式也可以C#转成java格式,也可以java转换为PHP格式,绝对可以使用,打开提示错误请安装.netframework
C# To Java converter是一款将C#代码片段或者C#项目转换为JAVA的工具。 转换所有版本的C#代码 评估所有引用的程序集和.NET项目,以便更完整地解析外部引用 许多转换和格式化选项 将C#代理和lambdas转换为Java接口...
试用演示版的Java文件夹转换到C#转换器2000行的代码片段转换到200行一次。 官方网站 http://www.tangiblesoftwaresolutions.com/ 有需要其他转换器的可以给我留言,我可以帮你破解. Instant C# converts VB code to...
主要介绍了使用C#代码获取存储过程返回值,需要的朋友可以参考下
C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)C#编程 数据库操作应用 在存储过程中使用事务(源码)(源码)C#编程 数据库操作应用 在存储过程中使用...
C#中调用Oracle存储过程
调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...
近正在做一个项目,其中遇到了一个问题是java与.NET之间的通信问题。具体的问题是这样的: 客户端使用java,服务器端使用的是C#。两者之间使用基于TCP的Socket通信方式。可是,做了一个测试小例子,结果从客户端...
一个很强大的工具, 能将c#代码片段、文件甚至工程直接转换成java代码,并能彻底解决外部引用的DLL问题,最强的是支持c#工程的直接转换,生成的Java代码质量也很不错。软件已破解,去除了未注册版最多只能转换1000行的...
一套学员量话管理 内涵数据库存储过程的详细使用 和返回值的接受 存储过程的的细致使用 给你打开思路 对每个对象有细致的划分
C#调用Java接口演示