2013-03-14 85 views
2

在我的应用程序中,我捕获了一个“时间戳”。我稍后在调用存储过程时使用此时间戳。目前我发现了错误:DateTime格式错误C#,Oracle

ORA-01830:转换整个输入串 ORA-06512前日期格式图片结束:在第2行

我需要小时,分钟和秒因为表格中的列必须是唯一的。

这是我如何得到我的日期时间:

private void getDate() 
    { 
     conn.Open(); 
     string query; 
     query = "select to_char(sysdate, 'dd/mon/yyyy hh24:mi:ss') as CurrentTime from dual"; 
     OracleCommand cmd = new OracleCommand(query, conn); 
     OracleDataReader dr = cmd.ExecuteReader(); 
     dr.Read(); 
     text = dr[0].ToString(); 
     dr.Close(); 
     conn.Close(); 
    } 

这是我如何调用该过程:

 OracleCommand cmd = new OracleCommand(); 
     cmd.Connection = conn; 
     conn.Open(); 
     OracleTransaction trans = conn.BeginTransaction(); 
     cmd.CommandTimeout = 0; 
     cmd.CommandText = "dc.hhrcv_insert_intrnl_audit_scn"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Parameters.Add("pn_pallet_id", OracleDbType.Number).Value = palletid; 
     cmd.Parameters.Add("pn_emp_id_no", OracleDbType.Number).Value = empid; 
     cmd.Parameters.Add("pd_intrnl_audit_scan_datetime", OracleDbType.VarChar).Value = text; 
     cmd.Parameters.Add("pn_company_id_no", OracleDbType.VarChar).Value = companyIdNo2; 
     cmd.Parameters.Add("pn_order_no", OracleDbType.Number).Value = orderNo2; 
     cmd.Parameters.Add("pn_carton_code", OracleDbType.Number).Value = carton_Code2; 
     cmd.Parameters.Add("pn_no_of_full_carton", OracleDbType.Number).Value = txtNoOfCartons.Text; 
     cmd.Parameters.Add("pn_no_of_packs", OracleDbType.Number).Value = txtNoOfPacks.Text; 
     cmd.Parameters.Add(new OracleParameter("pv_error", OracleDbType.VarChar)); 
     cmd.Parameters["pv_error"].Direction = ParameterDirection.Output; 
     string pv_error; 
     cmd.ExecuteNonQuery(); 
     pv_error = cmd.Parameters["pv_error"].Value.ToString(); 
     if (pv_error.ToString() == "") 
     { 
      trans.Commit(); 
      frmMsgAudit ms = new frmMsgAudit(empid,palletid,orderno,text); 
      ms.Show(); 
      this.Hide(); 
     } 
     else 
     { 
      trans.Rollback(); 
      MessageBox.Show("" + pv_error, "Error"); 
     } 
     conn.Close(); 

获取上的错误:

cmd.ExecuteNonQuery() ;预先在第2行

感谢:

ORA-01830:转换整个输入串 ORA-06512前日期格式画面结束。

+0

stredprocedure中参数的数据类型是什么?一个varchar2? – 2013-03-14 06:44:23

+0

是来自您的程序的错误?如果是这样,请发布你的程序代码。实际上,如果您使用的是Oracle 11.0.2.3或更高版本,我建议您使用实体框架。 – 2013-03-14 06:46:15

回答

2

感谢您的所有快速回复!

grrr ..我真的需要坐下来一步一步地走过去!不管怎么说,这是问题:

在存储过程中我有:

... 
begin 
insert into dc_internal_audit_scan (pallet_id_no, 
            internal_audit_scan_emp, 
            internal_audit_scan_datetime, 
            company_id_no, 
            order_no, 
            carton_code, 
            no_of_full_cartons, 
            no_of_packs, 
            last_update_datetime, 
            username)  
          values (ln_pallet_id_no, 
            pn_emp_id_no, 
            **pd_intrnl_audit_scan_datetime,** 
            pn_company_id_no, 
            pn_order_no, 
            pv_carton_code, 
            pn_no_of_full_cartons, 
            pn_no_of_packs, 
            sysdate, 
            lv_emp_username); 
end; 

现在:

... 
begin 
insert into dc_internal_audit_scan (pallet_id_no, 
            internal_audit_scan_emp, 
            internal_audit_scan_datetime, 
            company_id_no, 
            order_no, 
            carton_code, 
            no_of_full_cartons, 
            no_of_packs, 
            last_update_datetime, 
            username)  
          values (ln_pallet_id_no, 
            pn_emp_id_no, 
            **TO_DATE(pd_intrnl_audit_scan_datetime,'dd/mon/yyyy hh24:mi:ss'),** 
            pn_company_id_no, 
            pn_order_no, 
            pv_carton_code, 
            pn_no_of_full_cartons, 
            pn_no_of_packs, 
            sysdate, 
            lv_emp_username); 
end; 

TO_DATE(pd_intrnl_audit_scan_datetime,“DD/MON/YYYY HH24:MI:SS ')

谢谢

+1

我认为这是问题 - 根据'NLS_DATE_FORAMT',oracle隐式地将字符串转换为日期。 [这里是一个演示](http://www.sqlfiddle.com/#!4/d41d8/8758)(我已经做到了,为什么不添加它......) – 2013-03-14 07:07:06

1

看起来像这样的错误;

query = "select to_char(sysdate, 'dd/mon/yyyy hh24:mi:ss') 

什么 24在这里做?

试用;

query = "select to_char(sysdate, 'dd/mon/yyyy hh:mi:ss AM') 

FROM ORA-01830 Error

你试图输入一个日期值,但输入的日期不匹配 日期格式。

编辑:由于A.B.Cade warned mehh24是一个有效的Oracle格式,但我仍然相信你sysdate的格式和'dd/mon/yyyy hh24:mi:ss'是不同的格式。

+1

oracle中的'hh24'是天的小时的格式模型(0-23) – 2013-03-14 06:52:47

+0

@ A.B.Cade你是对的!更新。 – 2013-03-14 06:58:39