简体   繁体   English

从具有输入参数的Oracle存储过程返回数据表到.NET应用程序

[英]Returning data table from Oracle stored procedure that has input parameters to a .NET application

I have done some research into my issue, but I think I am struggling because of my lack of experience with Oracle (coming exclusively from a SQL Server background). 我已经对我的问题进行了一些研究,但是由于缺乏Oracle方面的经验(仅来自SQL Server背景),所以我感到很挣扎。

I'm trying to call an Oracle stored procedure from a .NET application and to return a data table to my application. 我正在尝试从.NET应用程序调用Oracle存储过程,并将数据表返回给我的应用程序。 I'm getting an "ORA-00900: invalid SQL statement" error. 我收到“ ORA-00900:无效的SQL语句”错误。

Pseudocode-behind: 伪代码背后:

OracleConnection conn = new OracleConnection("...");
OracleCommand cmd = new OracleCommand("sproc_name", conn);
cmd.Connection = conn;
cmd.Parameters.Add("Year", OracleDbType.Int16).Value = vYear
cmd.Parameters.Add("Name", OracleDbType.Varchar2).Value = vName;
cmd.Parameters.Add("ID", OracleDbType.Varchar2).Value = vID;
conn.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());

Pseudo stored procedure: 伪存储过程:

CREATE OR REPLACE
PROCEDURE sproc_name
(
  Year IN NUMBER
, Name IN VARCHAR2
, ID IN VARCHAR2
)
AS
BEGIN
SELECT *
FROM TABLE
WHERE TABLE.Year = Year AND
      TABLE.Name = Name AND
      TABLE.ID = ID
END sproc_name;

I have read up on reference cursors and I tried to rewrite my procedure with no luck. 我已经阅读了有关参考游标的内容,并尝试重写我的程序,但是没有运气。 How should I proceed here? 我应该如何进行?

Try this 尝试这个

using (var conn = new OracleConnection("..."))

using (var cmd = conn.CreateCommand())
{

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sproc_name";
cmd.BindByName = true;

//... // ...

Replying a bit old question, but its always good to reply an answered question, Oracle never give you output as sql. 回答有点老的问题,但是回答回答的问题总是好的,Oracle永远不会将您输出为sql。 For getting result set you need to identify sys_refcursor as Out parameter. 为了获得结果集,您需要将sys_refcursor标识为Out参数。

So, your procedure will be looks like Also try to name proper (just a suggestion) :) 因此,您的过程将类似于还尝试命名正确(只是一个建议):)

CREATE OR REPLACE PROCEDURE sproc_name (
  numYear IN NUMBER
, strName IN VARCHAR2
, numID IN VARCHAR2,
, cr_output out sys_refcursor
)
AS
BEGIN
open cr_output for
SELECT *
FROM TABLE
WHERE TABLE.Year = Year AND
      TABLE.Name = Name AND
      TABLE.ID = ID
END sproc_name;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 从.net应用程序执行Oracle存储过程 - Execute Oracle stored procedure from .net application 无法通过.Net应用程序调用具有表类型输入参数的HANA存储过程 - Can't call to HANA stored procedure which has Table Type Input Parameter through .Net application 将带有存储过程的参数从asp.net传递到oracle - Passing parameters with a stored procedure to oracle from asp.net 如何从.NET中的存储过程返回oracle输出参数 - How to return oracle output parameters from a stored procedure in .NET 将数组从.Net应用程序传递到Oracle存储过程 - Passing an array from .Net application to Oracle stored procedure 将输入参数从sql表传递到存储过程 - pass input parameters to stored procedure from sql table 如何将表值参数从 .net 代码传递给存储过程 - How to pass table value parameters to stored procedure from .net code 如何使用 Oracle 中的用户定义数据类型参数从 .NET 前端执行 Oracle 存储过程 - How to execute Oracle stored procedure with User Defined DataTypes Parameters in Oracle from .NET Front-End 从.NET执行Oracle存储过程 - Execute Oracle stored procedure from .NET 可以将返回表的存储过程中的选择Oracle查询转换为LINQ吗? - Could table-returning select Oracle query from stored procedure be transformed into LINQ?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM