从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表,但是所有设置看起来都相同。