本文来自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
分享到:
相关推荐
### 存储过程实例解释与事务处理 #### 一、简单存储过程的创建与调用 首先,我们来看一个简单的存储过程示例:`dbo....通过合理地设计和使用存储过程,以及有效地处理事务,可以显著提升应用程序的质量和稳定性。
本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGIN SELECT @studentname=...
本文将详细介绍C#如何使用存储过程,以及如何接收SQL存储过程的返回值。 首先,存储过程(Stored Procedure)是一组预编译的SQL语句,它在数据库服务器上预先定义并存储,可以被多次调用执行,降低了网络通信的负担...
- 在C#等编程语言中,可以捕获`RETURN`的值来判断存储过程的执行情况,如示例所示,通过`cmd.Parameters["@RETURN_VALUE"]`获取返回值。 2. `OUTPUT`参数: - `OUTPUT`参数允许存储过程修改传递给它的参数的值,...
在C# WinForm应用开发中,常常需要创建子窗口(Child Forms)来处理特定的任务,如用户输入、确认操作或显示详细信息。当子窗口完成其任务后,通常需要将结果返回给父窗口(Parent Form),以便进行后续的业务逻辑...
本文将详细讲解如何使用Java和C#这两种广泛使用的编程语言来调用数据库中的存储过程。 首先,让我们了解一下Java中的存储过程调用。在Java中,我们主要依赖于JDBC(Java Database Connectivity)API来与数据库进行...
这篇博文“关于sqlhelper调用存储过程和获取参数返回值”可能详细阐述了如何使用自定义的SqlHelper类来执行存储过程,并且获取存储过程中的输出参数值。下面将深入探讨这一主题。 首先,SqlHelper类一般包含一系列...
在实际开发中,根据具体需求,还可以结合使用其他机制,如使用静态类或单例模式存储共享数据,或者通过接口进行更复杂的通信。总之,选择合适的数据传递方式是确保代码可读性、可维护性和效率的关键。
压缩包中的`rsa_c#2java`可能是一个C#编写的工具,用于将RSA密钥从C#格式转换为JAVA可使用的格式。使用该工具时,需要确保系统已安装.NET Framework环境,否则可能无法运行。转换后,可以在JAVA应用程序中直接使用...
在C#编程中,存储过程(Stored Procedure)是预编译的SQL代码集合,它可以在数据库服务器上执行,提供了一种高效、安全的方式来处理数据。本示例将讲解如何在C#应用程序中调用存储过程获取返回值,并利用这些值在...
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
本篇将深入探讨C#中使用存储过程的用例,旨在促进理解和应用。 一、存储过程的概念 存储过程是在数据库中预先编译好的SQL语句集合,它封装了特定功能,可被多次调用。存储过程可以提高应用程序的性能,减少网络流量...
使用存储过程可以提高应用程序的性能,因为存储过程在第一次执行后会被编译并存储在数据库中,后续调用时无需再次编译。此外,存储过程还可以提高代码的重用性和安全性。 存储过程是数据库编程中的一个重要工具,它...
C# 代码转换为 Java C# To Java Converter 解除限制 C# 代码转换为 Java C# To Java Converter 解除限制 C# 代码转换为 Java C# To Java Converter 解除限制
C# To Java converter是一款将C#代码片段或者C#项目转换为JAVA的工具。 转换所有版本的C#代码 评估所有引用的程序集和.NET项目,以便更完整地解析外部引用 许多转换和格式化选项 将C#代理和lambdas转换为Java接口...
3. **C#调用Java接口**:在C#代码中,你可以像使用普通的.NET接口一样使用转换后的Java接口。例如: ```csharp using MyJavaInterface = MyJavaLibrary.MyJavaInterface; public class CSharpConsumer { private ...
“UseJAVA.rar”和“JAVADemo.rar”可能是包含示例代码的压缩包,它们可能演示了如何使用IKVM.NET在C#中调用Java方法的具体步骤。解压这两个文件,打开C#项目,查看其中的代码以了解实际操作。通常,你会看到如何...
本教程"VB6调C#输出返回值"聚焦于如何在VB6中调用C#函数,并获取返回值,这对于初学者来说是一次宝贵的学习机会。 首先,我们需要了解COM(Component Object Model)组件模型。VB6支持COM,它是一种二进制标准,...
以下是对如何使用C#获取存储过程返回值的详细解释: 1. **创建数据库连接**: 首先,你需要创建一个`SqlConnection`对象来建立与SQL Server数据库的连接。这通常涉及到提供连接字符串,其中包含服务器名称、数据库...
在C#部分代码中,我们首先需要建立一个到ORACLE数据库的连接,然后使用OracleCommand对象调用PACKAGE中的方法和存储过程。在调用f_get函数时,我们需要将输入参数str传递给函数,并将返回值存储在result参数中。在...