2

在我的应用程序中,我捕获了一个“时间戳”。我稍后在调用存储过程时使用此时间戳。目前我收到错误:

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();

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

提前致谢。

4

2 回答 2

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')

谢谢

于 2013-03-14T06:55:36.163 回答
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')

ORA-01830 Error

您尝试输入日期值,但输入的日期与日期格式不匹配。

编辑:由于 ABCade警告我,hh24是有效的 oracle 格式,但我仍然相信您sysdate的格式并且'dd/mon/yyyy hh24:mi:ss'是不同的格式。

于 2013-03-14T06:48:40.210 回答