猿问

C# .net Core 调用 Oracle 函数错误不是有效月份

在 Oracle 中,我在包中有一个函数:


function get_trans (

  in_idcard in number,

  in_datefrom in date,

  in_dateto in date

)

return trans_rec_list parallel_enable pipelined;

如果我像这样通过 SQL Developer 调用 func:


select field1, field12 from table(API.get_trans(1,TO_DATE('01/06/2018 00:00:00'), TO_DATE('21/06/2018 00:00:00')));

一切正常,但是当我像这样从 C# .net Core 调用函数时:


using (OracleConnection connection = new OracleConnection("MyConnectionString")) {

  connection.Open();


  using (OracleCommand cmd = connection.CreateCommand()) {

    cmd.CommandType = CommandType.Text;

    cmd.CommandText = String.Format("select field1, field12 from table(API.get_trans({0}, TO_DATE('{2}'), TO_DATE('{3}')))", 1, dates.Date_From.ToString("dd-MM-yyyy HH:mm:ss"), dates.Date_To.ToString("dd-MM-yyyy HH:mm:ss"));


    OracleDataReader er = cmd.ExecuteReader();

我有错误 ORA-01843: not a valid month


最后,如果我只是从cmd.CommandTextSQL Developer复制文本并在其中运行 - 一切正常


另一个类似的函数不使用类型date参数也能很好地工作


问题出在哪里?


人到中年有点甜
浏览 227回答 1
1回答

动漫人物

您需要定义日期格式以独立于环境的 NLS 设置。所以,而不是TO_DATE('01/06/2018 00:00:00')你应该使用TO_DATE('01/06/2018 00:00:00', 'dd/mm/yyyy hh24:mi:ss')
随时随地看视频慕课网APP
我要回答