利用Oracle.DataAccess调用Function的遇到的一个诡异问题
2012-01-18 14:21
225 查看
这是一段很简单的Function,(随便举个例子)
FUNCTION Execute(message_id_ IN OUT NUMBER,
part_no_ IN OUT VARCHAR2) RETURN VARCHAR2 IS
BEGIN
//这里,接收message_id_参数,做某些处理 part_no_ :='123456';
RETURN 'test';
END Execute;
以前是采用微软不再支持的System.Data.OracleClient命名空间,如下:
var connectionString = "xxxx";
OracleConnection conn = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand("TEST.TESTAB.Execute", conn);
cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add("message_id_", OracleType.Int32);cmd.Parameters[0].Direction = ParameterDirection.InputOutput;cmd.Parameters.Add("part_no_", OracleType.VarChar, 100);cmd.Parameters[1].Direction = ParameterDirection.InputOutput;cmd.Parameters.Add("result_", OracleType.VarChar, 2000);cmd.Parameters[2].Direction = ParameterDirection.ReturnValue;cmd.Prepare();
cmd.Parameters[0].Value = 10000;
cmd.ExecuteNonQuery();
以上代码能正确赋值和返回结果,但是后来程序给到别人改,他采用了Oracle公司为.NET专门开发的Oracle.DataAccess.dll,采用以上方法死活得不到传入值message_id_,而必须将返回参数值作为第一个参数才行,如下,而采用ADO.NET是没有这样的顺序限制的。
var connectionString = "xxxx";OracleConnection conn = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand("TEST.TESTAB.Execute", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("result_", OracleType.VarChar, 2000);cmd.Parameters[0].Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("message_id_", OracleType.Int32);
cmd.Parameters[1].Direction = ParameterDirection.InputOutput;
cmd.Parameters.Add("part_no_", OracleType.VarChar, 100);
cmd.Parameters[2].Direction = ParameterDirection.InputOutput;
cmd.Prepare();
cmd.Parameters[1].Value = 10000;
cmd.ExecuteNonQuery();
FUNCTION Execute(message_id_ IN OUT NUMBER,
part_no_ IN OUT VARCHAR2) RETURN VARCHAR2 IS
BEGIN
//这里,接收message_id_参数,做某些处理 part_no_ :='123456';
RETURN 'test';
END Execute;
以前是采用微软不再支持的System.Data.OracleClient命名空间,如下:
var connectionString = "xxxx";
OracleConnection conn = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand("TEST.TESTAB.Execute", conn);
cmd.CommandType = CommandType.StoredProcedure;cmd.Parameters.Add("message_id_", OracleType.Int32);cmd.Parameters[0].Direction = ParameterDirection.InputOutput;cmd.Parameters.Add("part_no_", OracleType.VarChar, 100);cmd.Parameters[1].Direction = ParameterDirection.InputOutput;cmd.Parameters.Add("result_", OracleType.VarChar, 2000);cmd.Parameters[2].Direction = ParameterDirection.ReturnValue;cmd.Prepare();
cmd.Parameters[0].Value = 10000;
cmd.ExecuteNonQuery();
以上代码能正确赋值和返回结果,但是后来程序给到别人改,他采用了Oracle公司为.NET专门开发的Oracle.DataAccess.dll,采用以上方法死活得不到传入值message_id_,而必须将返回参数值作为第一个参数才行,如下,而采用ADO.NET是没有这样的顺序限制的。
var connectionString = "xxxx";OracleConnection conn = new OracleConnection(connectionString);
conn.Open();
OracleCommand cmd = new OracleCommand("TEST.TESTAB.Execute", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("result_", OracleType.VarChar, 2000);cmd.Parameters[0].Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("message_id_", OracleType.Int32);
cmd.Parameters[1].Direction = ParameterDirection.InputOutput;
cmd.Parameters.Add("part_no_", OracleType.VarChar, 100);
cmd.Parameters[2].Direction = ParameterDirection.InputOutput;
cmd.Prepare();
cmd.Parameters[1].Value = 10000;
cmd.ExecuteNonQuery();
相关文章推荐
- 微信小程序外部API调用方法,遇到的一个小问题
- KindEditor使用过程中遇到的一个诡异的问题:form放在table中就失效
- 2013-5-25 1. “已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"问题. 上周在项目开发中,遇到这样的一个问题,在前台展示页,两个WebPart调用后台的AP
- 遇到的问题-----------定义一个全局变量,在page_load里赋值,但在其他按钮中调用仍为空
- 2013-5-25 1. “已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"问题. 上周在项目开发中,遇到这样的一个问题,在前台展示页,两个WebPart调用后台的AP
- 遇到的问题-----------定义一个全局变量,在page_load里赋值,但在其他按钮中调用仍为空
- 2013-5-25 1. “已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"问题. 上周在项目开发中,遇到这样的一个问题,在前台展示页,两个WebPart调用后台的AP
- 调用Hadoop时遇到的一个问题:could not find or load main class
- 汇编语言编程中遇到的一个跨文件函数调用问题
- 遇到一个关于调用javascript语句不起作用的问题
- 遇到一个诡异目前无解的系统部署问题
- 2013-5-25 1. “已有打开的与此命令相关联的 DataReader,必须首先将它关闭。"问题. 上周在项目开发中,遇到这样的一个问题,在前台展示页,两个WebPart调用后台的AP
- 今天工作需要调用一个c++程序,以给那个程序发送请求的方式,遇到了跨域问题
- 今天遇到一个诡异的问题
- java调用linux top命令的方法,以及遇到的一个问题
- c/c++中利用gsoap调用webservice服务的一个诡异问题解决方法
- ISE使用过程中遇到的一个诡异问题
- 前端开发在IOS端遇到的一个诡异问题(Delegate 失效)
- 遇到一个诡异的regedit.exe程序问题
- 刚遇到的一个C#中调用api,回调函数的问题