使用 SYS_refcursor 类型的输出参数
在我的数据库中,我有一个带有 SYS_REFCURSOR 类型的 OUTPUT 参数的存储过程。应用程序端是用C#编写的。我可以将此过程的输出参数分配给数据表,例如:
.............
OracleConnection con=new OracleConnection(......);
OracleCommand cmd=new OracleCommand("MyStoredProc",con);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("REC_CUR",OracleType.Cursor).Direction=ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
DataTable dt=(DataTable)cmd.Parameters["REC_CUR"].value;//is this legal?
In my database I have a stored procedure with an OUTPUT parameter of type SYS_REFCURSOR. The application side is wrtitten in C#. Can I assign this procedure's output parameter to a Datatable like:
.............
OracleConnection con=new OracleConnection(......);
OracleCommand cmd=new OracleCommand("MyStoredProc",con);
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add("REC_CUR",OracleType.Cursor).Direction=ParameterDirection.Output;
con.Open();
cmd.ExecuteNonQuery();
DataTable dt=(DataTable)cmd.Parameters["REC_CUR"].value;//is this legal?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是我自己的问题的答案。如果存储过程的输出参数是 SYS_REFCURSOR 类型,则该命令
将返回 OracleDataReader 对象,而不是表。并且不存在从 OracledataReader 到 DataTable 的隐式或显式转换。
Here's the answer to my own question. If the output parametr of a stored procedure is of type SYS_REFCURSOR then the command
will return an OracleDataReader object, not a table. And there's no implicit , nor explicit cast from OracledataReader to DataTable.
您可以使用
OracleDataAdapter
,如下所示,带有多个输出参数的示例代码与
RefCursor
:You can use
OracleDataAdapter
like below,sample code with multiple out parameters with
RefCursor
: