#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();
}
Это определенно поможет вам … у меня тоже была такая же проблема…