Недопустимый месяц в дате - формат даты в Informix периодически возвращается

2

Итак, у нас есть сервер AIX (ugh), который запускает систему ERP. Эта система, созданная в отчетах, сосать, поэтому мне, конечно, поручено создавать отчеты, которые нам нужны.

У меня есть много отчетов, которые я запускаю, и, конечно же, для конкретных дат и т.д. Кодирование выполняется на С#, запущенном в ASP.net, в окне Windows Server 2003 Standard Server. Он использует Informix CSDK для подключения через .Net Data Adapter, который поставляется вместе с CSDK. Сервер запускает Informix 10 на сервере AIX 5.2.

Что странно в том, что в любое время, когда мы запускаем и останавливаем Informix или перезагружаем сервер и т.д., похоже, что Informix решает изменить способ обработки даты через CSDK. Если он в настоящее время ожидает MM/DD/YYYY, тогда он в конечном итоге решит после вышеупомянутой ситуации, которая хочет его в ГГГГ/ММ/ДД. Обычно это приводит к ошибке "Недействительный месяц в дате". Затем я перехожу к своей функции dateformat (чтобы я мог легко откинуться назад и вперед) и вручную изменить ее. Пару отчетов, которые я создал для обработки этой ошибки, а затем повторить один и тот же запрос с другим форматом даты. Это, конечно, меньше идеала, и я хотел бы разобраться с ним!

Вот какой-то вложенный текст из ошибки страницы ASP.net. Спасибо!

Server Error in '/' Application.
ERROR [HY000] [Informix .NET provider][Informix]Invalid month in date
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about theerror and where it originated in the code.

Exception Details: IBM.Data.Informix.IfxException: ERROR [HY000] [Informix .NET provider][Informix]Invalid month in date

Source Error:

Line 479:
Line 480:        //aUsage = new IfxDataAdapter(sSelect_Usage, conn);
Line 481:        aUsage.Fill(dsUsage, "Usage");
Line 482:        aUsage.Dispose();
Line 483:        dtUsage = dsUsage.Tables["Usage"];


Source File: D:\Inetpub\reports2.oscarwinski.com\App_Code\IMRShipClass.cs    Line: 481

Stack Trace:

[IfxException: ERROR [HY000] [Informix .NET provider][Informix]Invalid month in date]
   IBM.Data.Informix.IfxConnection.HandleError(IntPtr hHandle, SQL_HANDLE hType, RETCODE retcode) +26
   IBM.Data.Informix.IfxCommand.ExecuteReaderObject(CommandBehavior behavior, String method) +654
   IBM.Data.Informix.IfxCommand.ExecuteReader(CommandBehavior behavior) +117
   IBM.Data.Informix.IfxCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior) +4
   System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +130
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) +287
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
   IMRShipClass.Generate() in D:\Inetpub\reports2.oscarwinski.com\App_Code\IMRShipClass.cs:481
   IMRShip.testIMR() in D:\Inetpub\reports2.oscarwinski.com\IMRShip.aspx.cs:114
   IMRShip.btnExport2Excel_Click1(Object sender, EventArgs e) in D:\Inetpub\reports2.oscarwinski.com\IMRShip.aspx.cs:259
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565


Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 
Теги:
informix
aix

7 ответов

1

Формат даты контролируется клиентом, а не сервером. Очевидно, что он имеет дефолт (формат США), но каждый клиент может диктовать формат, который он хочет использовать. Это делается путем установки переменной DBDATE. (Существует также GL_DATE, если вы используете локали.)

Если формат даты был включен, вы должны проверить значение этой переменной среды. Установлено ли это промежуточным программным обеспечением в некоторых случаях?

  • 0
    Есть ли способ сначала отобразить значение DBDATE, а затем изменить его. Я пытался с echo $ DBDATE, однако команда ничего не возвращает. Я не могу найти даже какой формат даты по умолчанию?
0

Это может быть не так для вашей конкретной установки, но я видел, как серверы меняют формат даты, сообщаемый базам данных, когда у администраторов была установлена ​​их локаль, отличная от значения по умолчанию, но только во время входа в систему! Вы можете проверить настройки страны/региона для каждого пользователя в системе.

0

DB2/Informix переопределяет формат даты клиента. Вы связываетесь с администратором Db2 и устанавливаете формат даты на стороне сервера один раз для всех. Мы столкнулись с такой же проблемой в AS400 (DB2), и администратор базы данных никогда не принимал ее, как в вашем случае. После того, как синтаксис формата даты ISO был взят с сайта IBM и предоставлен администратору DB2, он изменил его. После этого наши программы отлично работали с датами.
Удачи.

0

Это, вероятно, не связано, но я получал ту же ошибку. Я закончил тем, что менял одиночные кавычки в моем SQL в круглые скобки. Я использовал параметризованный SQL.

SELECT id, descriptor FROM Foo WHERE descriptor >= '?' становится

SELECT id, descriptor FROM Foo WHERE descriptor >= (?) 
0

Установите DBDATE=MDY4/ в клиентское приложение, которое также запускает отчеты и все остальные клиенты.

0

Urgh!.NET не мой сильный момент - вам, возможно, придется адаптировать то, что я говорю, чтобы работать правильно.

В Windows, к лучшему или худшему, есть утилита Informix под названием SETNET32, которая может использоваться для установки связанных с Informix переменных среды для программ Windows, которые подключаются к базам данных Informix. Вы не упоминаете, используете ли вы что-либо, используя это. Изучите, используется ли он поставщиком Informix.NET.

Вы также не упоминаете, перезапускается ли экземпляр сервера IDS в окне AIX при возникновении проблемы. Я предполагаю, что нет. (Анализ мог бы отличаться, если бы это было сделано.)

Основной переменной среды, которая управляет форматом даты, является DBDATE. Он принимает различные обозначения, например:

DBDATE=dmy4/        # 30/07/2009
DBDATE=mdy4/        # 07/30/2009
DBDATE=y4md-        # 2009-07-30
DBDATE=mdy20        # 073009

Не используйте последнюю. Если есть изменения в значении DBDAT E, это может отражать некоторые ваши проблемы, и установка DBDATE, вероятно, устранит ваши проблемы.

Существуют и другие переменные, влияющие на интерпретацию даты, если DBDATE не задано; они включают CLIENT_LOCALE и DB_LOCALE, и даже GL_DATE. Тем не менее, DBDATE имеет наивысший приоритет и чаще всего устанавливается большинством людей.

  • 0
    Странно то, что это происходит НЕ при перезагрузке Windows-сервера, а при перезапуске Informix Instance в AIX.
  • 0
    @DarkUnderlord: это странное поведение. Что меня удивляет, так это изменение во время работы IDS, а не перезагрузка. Очень важно убедиться, что IDS всегда запускается в одной и той же среде, чтобы гарантировать, что после перезагрузок вы будете работать одинаково. Но это не объясняет видимых изменений во время работы IDS.
-3

Запустите экземпляр informix как root вместо пользователя informix... он решает мой pb и мой ночной lol

Ещё вопросы

Сообщество Overcoder
Наверх
Меню