Неправильная вставка даты в базу данных Oracle с использованием .net oledb

#asp.net #sql #oracle

#asp.net #sql #Oracle

Вопрос:

когда я пытаюсь вставить запись через.net, использующий oledb, вставляет неправильные данные

 public void param()
{
    OleDbCommand cmd2 = new OleDbCommand("INSERT INTO PARAM_INF(PRM_FRM_DT,PRM_TO_DT) values(to_date('01-Jul-2014'),to_date('01-Jul-2014'))", con) { CommandType = CommandType.Text };
    if (con.State == ConnectionState.Closed)
    {
        con.Open();
    }
    cmd2.ExecuteNonQuery();
    con.Close();
}
  

Результат select prm_frm_dt,prm_to_dt from PARAM_INF;

 PRM_FRM_DT         PRM_TO_DT        
------------------ ------------------
20-JUL-01 02:00:00 20-JUL-01 02:00:00
  

Но тот же оператор insert из sqldeveloper или sqlplus выдает правильный результат.

 select prm_frm_dt,prm_to_dt from PARAM_INF;

PRM_FRM_DT         PRM_TO_DT        
------------------ ------------------
01-JUL-14 12:00:00 01-JUL-14 12:00:00 
  

Комментарии:

1. Нужна помощь, у меня серьезные проблемы

2. Я предполагаю, что это просто то, как инструменты используют формат даты по умолчанию

3. Правильно бы помог параметризованный запрос; таким образом, вы не вводите текстовые даты, которые зависят от культуры и различий между каждым сервером / платформой

Ответ №1:

 public void param()
{
    OleDbCommand cmd2 = new OleDbCommand("INSERT INTO PARAM_INF(PRM_FRM_DT,PRM_TO_DT) values('"   String.Format("{0:yyyy-MMM-dd}", Convert.ToDateTime("01-Jul-2014"))   "','"   String.Format("{0:yyyy-MMM-dd}", Convert.ToDateTime("01-Jul-2014"))   "')", con) { CommandType = CommandType.Text };
    if (con.State == ConnectionState.Closed)
    {
        con.Open();
    }
    cmd2.ExecuteNonQuery();
    con.Close();
}
  

Это определенно поможет вам … у меня тоже была такая же проблема…