C# 如何使用c执行返回多个游标的oracle存储过程#
我正在将OracleClient与C#一起使用。 我有一个返回多个游标的存储过程。 我必须将每个游标关联到不同的表。 但当它试图这样做时,我得到了这个错误C# 如何使用c执行返回多个游标的oracle存储过程#,c#,oracle,plsql,cursor,C#,Oracle,Plsql,Cursor,我正在将OracleClient与C#一起使用。 我有一个返回多个游标的存储过程。 我必须将每个游标关联到不同的表。 但当它试图这样做时,我得到了这个错误 ORA-24338: statement handle not executed 谁能帮我纠正这个问题。OracleClient系统.Data.OracleClient?它已被弃用。不要使用它 请尝试使用Oracle提供的托管.NET ODP,如下所示(ODAC 12c和更高版本是100%托管代码): 如果这对您没有帮助,请尝试发布更多信息
ORA-24338: statement handle not executed
谁能帮我纠正这个问题。
OracleClient
<代码>系统.Data.OracleClient?它已被弃用。不要使用它
请尝试使用Oracle提供的托管.NET ODP,如下所示(ODAC 12c和更高版本是100%托管代码):
如果这对您没有帮助,请尝试发布更多信息,如数据库版本、连接器版本等。我目前已经实现了此类代码。那么,让我告诉你我遵循的步骤
using (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();
for (int i = 0; i < objcmd.Parameters.Count; i++)
{
if(objcmd.Parameters[i].DbType == DbType.Object)
{
if(!(OracleRefCursor) objCmd.Parameters[i].Value).IsNull)
{
var cursorParam = ((OracleRefCursor) objCmd.Parameters[i].Value).GetDataReader();
if(cursorParam.HasRows && cursorParam.FieldCount > 0)
{
MapCursors(cursorParam, objcmd.Parameters[i].ParameterName, response); //type of your response object.
}
}
}
}
谢谢你的回答,我会用它的。
private void MapCursors(OracleDataReader cursorParam, string parameterName, ClassName response)
{
case "Ref_CursorName1":
RetriveDataFromRef_CursorName1(cursorParam, response);
break;
}