2014-01-09 6 views
0

У меня есть запрос, где мне нужно проверить дату между двумя датами с помощью Oracle. Всякий раз, когда я запускаю код, я получаю ORA-01843: не допустимая ошибка месяца. Однако всякий раз, когда я удаляю один из двух параметров из sql, он отлично работает, но при попытке использовать два параметра даты выдает ошибку. Что мне не хватает?2nd Date Параметр Throws ORA-01843: ошибка недействительна месяца

 StringBuilder sql = new StringBuilder(); 
     DateTime yearBegin = new DateTime(Convert.ToInt32(taxYear) + 1, 1, 1); 
     DateTime yearEnd = new DateTime(Convert.ToInt32(taxYear) + 1, 12, 31); 
     sql.Append(
      "SELECT * FROM TABLE WHERE FIELD = '1099' AND CREATED_DT >= TO_DATE(:createdYearBegin, 'MM/DD/YYYY') AND CREATED_DT <= TO_DATE(:createdYearEnd, 'MM/DD/YYYY') AND SSN = :ssn"); 
     try 
     { 
      using (OracleConnection cn = new OracleConnection(ConfigurationManager.AppSettings["cubsConnection"])) 
      using (OracleCommand cmd = new OracleCommand(sql.ToString(), cn)) 
      { 
       cmd.Parameters.Add("ssn", ssn); 
       cmd.Parameters.Add("createdYearBegin", yearBegin.ToShortDateString()); 
       cmd.Parameters.Add("createdYearEnd", yearEnd.ToShortDateString()); 
       cn.Open(); 
       OracleDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
       ret = dr.HasRows; 
      } 
     } 
+0

Даты выглядят правильно при просмотре в отладчике, и если это было проблемой с результатом ToShortDateString(), то у него была бы такая же проблема, было ли один или два параметра даты, но поскольку, если я удалю его, или другой параметр даты, и запустите его только с одним из параметров, который работает нормально. –

+0

Так вы могли бы видеть, что такое sql, сгенерированный с обеих дат? Пример здесь: http://stackoverflow.com/questions/265192/get-the-generated-sql-statement-from-a-sqlcommand-object –

+0

sql как и ожидалось (хотя мне пришлось добавить одиночные кавычки вокруг дат : SELECT * FROM TABLE WHERE FIELD = '1099' AND CREATED_DT> = TO_DATE ('1/1/2014', 'MM/DD/YYYY') И CREATED_DT <= TO_DATE ('12/31/2014 ',' MM/DD/YYYY ') И SSN =' ssnNumber ' –

ответ

1

У вас возникла проблема с заказом вашего параметра.

Если вы не связываете параметры по имени, они связаны положением (означает, что порядок, в котором вы добавляете параметры, берется).

Просто попробуйте добавить:

cmd.BindByName = true; 
+0

Даты выдаются правильно, и если это было проблемой с результатом ToShortDateString(), то у него была бы такая же проблема, было ли один или два параметра даты, но поскольку if Я удаляю один или другой параметр даты и запускаю его только одним из параметров, который он отлично работает. –

+0

@UnHolyRam Я нашел что-то еще, не могли бы вы попробовать? –

+0

У нас есть победитель. Спасибо –

0

Вы ожидаете, что дата в формате MM/DD/YYYY, но это не гарантирует, что ToShortDateString() возвращает его в этом формате. Необходимо указать формат. Но хорошо, я даже не знаю, какой язык программирования вы используете, чтобы предоставить дополнительную помощь ...

0

Распечатайте результаты ToShortDateString, и вы увидите, что произойдет. Кроме того, я согласен с «вы должны предоставить формат, потому что вы не можете полагаться на значение по умолчанию».

+0

DateTime in C#, работающий с 0 до 11? Действительно? Откуда это взято? –

+0

Выглядел как J ava для меня, и OP не предоставил языковой тег. Удалил эту часть моего ответа. –

 Смежные вопросы

  • Нет связанных вопросов^_^