当前位置: 首页 > 知识库问答 >
问题:

无效月份ASP.NET/oracle

薛泰
2023-03-14
ONE = fromDate.Value
TWO = toDate.Value
Generic.searchBetweenDates(ONE, TWO, dt)


Public Function searchBetweenDates(ByVal PFROMDATE As String, ByVal PTODATE As String, ByRef PUSERINFO As DataTable)
        Dim myDataTable As New DataTable
        Dim myDataAdapter As New OracleDataAdapter

        Dim oraCmd As New OracleCommand("cantine_test.searchbetweendates")
        oraCmd.CommandType = System.Data.CommandType.StoredProcedure
        oraCmd.Parameters.Add(New OracleParameter("PFROMDATE", OracleType.VarChar, 30)).Value = PFROMDATE
        oraCmd.Parameters.Add(New OracleParameter("PTODATE", OracleType.VarChar, 300)).Value = PTODATE
        oraCmd.Parameters.Add(New OracleParameter("PUSERINFO", OracleType.Cursor)).Direction = ParameterDirection.Output

        Dim oConn As New OracleConnection(ConnectionString)
        Try
            oConn.Open()
            oraCmd.Connection = oConn
            cleanParams(oraCmd.Parameters)

            myDataAdapter.SelectCommand = oraCmd
            myDataAdapter.Fill(myDataTable)
            If Not myDataTable Is Nothing Then
                PUSERINFO = myDataTable 'return reference using byref param
            End If
        Catch ex As Exception
            MsgBox(ex.Message)
        Finally
            oraCmd.Dispose()
            oConn.Close()
            myDataAdapter.Dispose()
        End Try
        Return PUSERINFO
    End Function

下面是我的Oracle过程中的代码:

PROCEDURE searchbetweendates
   (PFROMDATE IN VARCHAR2, PTODATE IN VARCHAR2, PUSERINFO OUT SYS_REFCURSOR)
   AS

BEGIN
    OPEN PUSERINFO FOR

        SELECT ORDERDATE,ORDERID,ORDERTIME,ORDERLIST,QUANTITY,ITEMPRICE,ORDERPRICE,LOCATION
        FROM ORDERSDETAIL 
        WHERE ORDERDATE >= to_date(PFROMDATE, 'dd/MM/yyyy')
        AND ORDERDATE <= to_date(PTODATE,'dd/MM/yyyy');

END;

有什么想法吗?

共有1个答案

阎修杰
2023-03-14

当传递与指定日期格式不匹配的字符串时,Oracle会抛出ORA-01843:例如,当字符串具有美国格式而格式掩码不匹配时:

SQL> select to_date('01/13/2013', 'dd/mm/yyyy') from dual
  2  /
select to_date('01/13/2013', 'dd/mm/yyyy') from dual
               *
ERROR at line 1:
ORA-01843: not a valid month


SQL> 

所以,最有可能的解释是,你传递的值,你认为有一个共同的格式,但实际上没有。当“日期”存储为字符串时,这是非常常见的。换句话说,这是一个调试问题。

不过,有一个想法出现了:OrdersDetail.OrderDate本身是一个日期数据类型。

 类似资料:
  • 我希望在oracle数据库11.2.0.4版上的PL/SQL ETL进程中插入具有时间戳列的表中的数据 如果在Toad中运行“Create INSERT from seletcted row”,将得到以下SQL命令: 在PL/SQL中,我生成一个varchar2/string,类似于:

  • 我在Oracle DB中有一个列,它是数据类型。存储在此列中的典型值类似于。我试图得到所有的记录,其中该专栏有记录后2015年8月1日。 但是,我得到的是。我哪里做错了?

  • 问题内容: 我正在尝试从包含日期列的.xlsx电子表格中导入数据。在这些列中,日期以DD-MON-YY格式显示(例如:20-AUG-12)。 运行导入向导时,一切正常,直到必须精确调整列/字段映射。我有一个免责声明,说所选格式与表字段定义不匹配(我的字段是日期字段)。插入脚本的示例: 当我尝试运行此查询时,出现以下错误: ORA-01843:无效月份01843。00000-“无效月份” 如您所见,

  • 我有一个包含以下字段的表: 报告(表名)Rep_Date(日期)Rep_Time(日期) 更新15:58我现在可以执行以下查询: 但是,我需要在子句中再添加一条语句,将MaxDate的时间部分与rep_time:不起作用。

  • 问题内容: 我在sql中有一个表,如下所示: 我正在尝试插入它: 但是我得到了错误:ORA-01843:无效的月份 这是一个Oracle数据库。我不确定日期格式有什么问题。 问题答案: 目前尚不清楚您想要哪个,因此您可以尝试: 对于月日年格式: 对于日-月-年格式: 另外,建议阅读:Oracle函数:TO_DATE