在WebApi的查询中将日期时间转换为Oracle格式的问题-发生错误消息

时间:2018-10-09 12:02:02

标签: c# oracle datetime asp.net-web-api

从webApi2项目中,我正在向Oracle Db添加行。在我的开发机器上测试此方法时,一切顺利,并创建了新记录。将其部署到服务器并在服务器上进行测试后,我注意到未添加任何记录,并且我收到一条消息,提示“发生了错误”。

[HttpPost]
    [Route("CreateTpmEntry")]
    [ResponseType(typeof(Process))]
    public IHttpActionResult CreateTpmEntry(Process p)
    {
        string ConStr = ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString;
        var Con = new Oracle.ManagedDataAccess.Client.OracleConnection(ConStr);

        if (Con.State == System.Data.ConnectionState.Closed)
        {
            Con.Open();
        }


        string iStr = @"INSERT INTO ifc.qmes_tpm_repairs_imp (order_nr, manager_nr, start_date, closemean_nr, end_date, initial_diagnosis, repair_actions, STATUS) 
                        VALUES ('{0}', '{1}', TO_DATE('{2}', 'YYYY-MM-DD HH24:MI:SS', 'NLS_DATE_LANGUAGE = POLISH'), '{3}', TO_DATE('{4}', 'YYYY-MM-DD HH24:MI:SS', 'NLS_DATE_LANGUAGE = POLISH'), '{5}', '{6}' ,'{7}')";

        iStr = string.Format(iStr, p.Number, p.Manager, p.StartDate, p.FinishedBy, p.EndDate, p.InitialDiagnosis, p.RepairActions, p.Status);

        var Command = new Oracle.ManagedDataAccess.Client.OracleCommand(iStr, Con);

        Command.ExecuteNonQuery();

        return Ok();

    }

我对其进行了更多测试,发现从iStr中取出end_date和start_date时一切正常,因此问题必须与日期格式有关。我以为TO_DATE函数会注意将日期设置为适当的格式,但是显然这还不够。这是示例性的iStr:

    INSERT INTO ifc.qmes_tpm_repairs_imp (order_nr, manager_nr, start_date, closemean_nr, end_date, initial_diagnosis, repair_actions, STATUS) 
VALUES ('A/2018/152170', 'MSMITH', TO_DATE('2018-10-08 14:48:13', 'YYYY-MM-DD HH24:MI:SS', 'NLS_DATE_LANGUAGE = POLISH'), 'MSMITH', TO_DATE('2018-10-08 14:54:13', 'YYYY-MM-DD HH24:MI:SS', 'NLS_DATE_LANGUAGE = POLISH'), 'Machine not working', 'Call service for control panel' ,'AC')

我在开发机和部署机上都检查了NLS_DATABASE_PARAMETERS表,但是所有设置看起来都相同。

0 个答案:

没有答案