首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用date参数从.Net查询oracle数据库

使用date参数从.Net查询oracle数据库
EN

Stack Overflow用户
提问于 2019-06-17 20:43:08
回答 2查看 50关注 0票数 0

这件事要毁了我……

我有一个Oracle过程,如下所示:(这是我的最新版本)

代码语言:javascript
复制
create or replace PROCEDURE MANAGEMENTFEES 
(
  STARTDATE IN VARCHAR2    
, ENDDATE IN VARCHAR2
, cursor_ OUT sys_refcursor
) AS 
BEGIN
OPEN cursor_ FOR
    select PR.PRNUM
    FROM MAXIMO.PR
    WHERE PR.ISSUEDATE > to_date(STARTDATE) AND PR.ISSUEDATE < to_date(ENDDATE) 
END MANAGEMENTFEES;

我使用以下.Net代码查询它。

代码语言:javascript
复制
OracleConnection connection = getConnection();
            connection.Open();
            string startDate = new DateTime(2019, 1, 1).ToString("dd-MMM-yy");
            string endDate = new DateTime(2019, 5, 1).ToString("dd-MMM-yy");

            OracleDataAdapter da = new OracleDataAdapter();
            OracleCommand cmd = new OracleCommand();
            cmd.Connection = connection;
            cmd.CommandText = "ORACLE.MANAGEMENTFEES";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("STARTDATE", OracleDbType.Varchar2).Value =startDate;
            cmd.Parameters.Add("ENDDATE", OracleDbType.Varchar2).Value = endDate;
            cmd.Parameters.Add("cursor_", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
            cmd.ExecuteNonQuery();
            da.SelectCommand = cmd;
            DataTable dt = new DataTable();
            da.Fill(dt);

这给了我一个空白的数据表,但它确实有标题。所以这告诉我查询没有得到任何结果。我一直在使用多个堆栈溢出答案更改日期参数,但我没有得到任何结果。

如果我在过程中硬编码日期,它工作得很好,但我希望能够传入不同的日期。

帮助?

更新-添加了具有硬编码日期的代码

代码语言:javascript
复制
create or replace PROCEDURE MANAGEMENTFEES 
(
  STARTDATE IN DATE    
, ENDDATE IN DATE
, cursor_ OUT sys_refcursor
) AS 
BEGIN
OPEN cursor_ FOR
    select PR.PRNUM
    FROM MAXIMO.PR
    WHERE PR.ISSUEDATE > '01-JAN-19' AND PR.ISSUEDATE < '01-MAY-19' 
    ORDER BY ISSUEDATE ASC;
END MANAGEMENTFEES;
EN

回答 2

Stack Overflow用户

发布于 2019-06-17 21:34:32

您的过程应该如下所示:

代码语言:javascript
复制
create or replace PROCEDURE MANAGEMENTFEES 
(
  STARTDATE IN DATE
, ENDDATE IN DATE
, cursor_ OUT sys_refcursor
) AS 
BEGIN
OPEN cursor_ FOR
    select PR.PRNUM
    FROM MAXIMO.PR
    WHERE PR.ISSUEDATE > STARTDATE AND PR.ISSUEDATE < ENDDATE
END MANAGEMENTFEES;

在.NET中的调用是这样的:

代码语言:javascript
复制
DateTime startDate = new DateTime(2019, 1, 1);
DateTime endDate = new DateTime(2019, 5, 1);
...
cmd.Parameters.Add("STARTDATE", OracleDbType.Date).Value = startDate;
cmd.Parameters.Add("ENDDATE", OracleDbType.Date).Value = endDate;
票数 1
EN

Stack Overflow用户

发布于 2019-06-18 18:38:08

现在这个问题已经解决了,它是由使用STARTDATEENDDATE引起的(尽管没有抛出错误)。

将它们更改为v_STARTDATEv_ENDDATE解决了问题。

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

https://stackoverflow.com/questions/56631567

复制
相关文章

相似问题

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