首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用c#执行返回多个游标的oracle存储过程

如何使用c#执行返回多个游标的oracle存储过程
EN

Stack Overflow用户
提问于 2014-03-17 10:03:36
回答 2查看 1.2K关注 0票数 0

我将OracleClient与C#结合使用。我有一个返回多个游标的存储过程。我得把每个游标和不同的桌子联系起来。但是当它试图这样做的时候,我得到了这个错误。

代码语言:javascript
复制
ORA-24338: statement handle not executed

有人能帮我纠正这个问题吗。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-10 16:13:55

我目前已经实现了这样的代码。那么,让我给你我遵循的步骤。

  1. 在DAC层,我安排了存储过程的输入参数和输出参数(RefCursors)。 使用(DbCommand objCmd = dbObject.GetSqlStringCommand(queryString)) {objCmd.Parameters.Add("Ref_CursorName1",OracleDbType.RefCursor,ParameterDirection.Output);objCmd.Parameters.Add("Ref_CursorName2",OracleDbType.RefCursor,ParameterDirection.Output);connectoinObj.Open();objCmd.ExecuteNonQuery();
  2. 迭代参数计数。 对于(int i= 0;i< objcmd.Parameters.Count;i++) { if(objcmd.Parametersi.DbType == DbType.Object) { if(!(OracleRefCursor) objCmd.Parametersi.Value).IsNull) { var cursorParam =(OracleRefCursor) objCmd.Parametersi.Value).GetDataReader();if(cursorParam.HasRows && cursorParam.FieldCount > 0) { MapCursors(cursorParam,objcmd.Parametersi.ParameterName,response);//类型您的响应对象。}}}
  3. 最后一步是MapCursors方法实现。 私有void MapCursors(OracleDataReader cursorParam,string parameterName,ClassName响应){ case "Ref_CursorName1":RetriveDataFromRef_CursorName1(cursorParam,response);断开;}
  4. 将光标数据映射到对象的映射(响应)。
票数 0
EN

Stack Overflow用户

发布于 2014-03-17 10:45:01

OracleClientSystem.Data.OracleClient?这是不可取的。不要用它。

请尝试使用来自Oracle的托管.NET ODP,在这里可以找到(ODA12c及更高版本是100%托管代码):http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html

如果这对你没有帮助,试着发布更多的信息,比如数据库版本,连接器版本等等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22451396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档