【问题标题】:Returning data table from Oracle stored procedure that has input parameters to a .NET application从具有输入参数的 Oracle 存储过程返回数据表到 .NET 应用程序
【发布时间】:2016-07-07 14:04:35
【问题描述】:

我已经对我的问题进行了一些研究,但我认为我正在苦苦挣扎,因为我缺乏使用 Oracle 的经验(完全来自 SQL Server 背景)。

我正在尝试从 .NET 应用程序调用 Oracle 存储过程并将数据表返回到我的应用程序。我收到“ORA-00900:无效的 SQL 语句”错误。

伪代码隐藏:

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());

伪存储过程:

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;

我已经阅读了参考游标,但我试图重写我的程序但没有运气。我该怎么做?

【问题讨论】:

    标签: c# .net oracle stored-procedures


    【解决方案1】:

    试试这个

    using (var conn = new OracleConnection("..."))
    
    using (var cmd = conn.CreateCommand())
    {
    
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = "sproc_name";
    cmd.BindByName = true;
    

    //...

    【讨论】:

      【解决方案2】:

      回答一个有点老的问题,但回答一个已回答的问题总是好的, Oracle 从不给你输出为 sql。要获取结果集,您需要将 sys_refcursor 标识为 Out 参数。

      因此,您的程序将如下所示 也尝试正确命名(只是一个建议):)

      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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-24
        • 2015-08-18
        • 1970-01-01
        • 1970-01-01
        • 2011-05-01
        • 1970-01-01
        • 2016-08-19
        • 2018-07-28
        相关资源
        最近更新 更多