日期中的月份无效 - Informix中的日期格式会偶尔恢复

时间:2009-07-30 18:19:41

标签: c# asp.net windows informix aix

所以我们有一个运行ERP系统的AIX(ugh)服务器。这个系统的内置报告很糟糕,所以我当然负责构建我们需要的报告。

我运行的报告很多,当然大部分时间都是针对特定的日期等。编码是在Windows 2003 Standard Server上的ASP.net中运行的C#中完成的。它使用Informix CSDK通过CSDK附带的.Net数据适配器进行连接。服务器在AIX 5.2服务器上运行Informix 10。

奇怪的是,无论何时我们启动和停止Informix或重新启动服务器等,似乎Informix决定通过CSDK改变它处理日期的方式。如果它目前正在期待MM / DD / YYYY那么它最终会在上述情况之后决定是否需要YYYY / MM / DD。这通常最终会给我一个“日期无效的月份”错误。然后我进入我的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 

7 个答案:

答案 0 :(得分:1)

日期格式由客户端控制,而不是服务器。显然它有默认(美国格式),但每个客户端都可以指定它希望使用的格式。这是通过设置DBDATE environment variable来完成的。 (如果您使用的是区域设置,也会GL_DATE。)

如果已切换日期格式,则应检查此环境变量的值。在某些情况下,它是由您的中间件设置的吗?

答案 1 :(得分:0)

Urgh! .NET不是我的强项 - 你可能必须调整我所说的才能正常工作。

在Windows上,无论好坏,都有一个名为SETNET32的Informix实用程序,可用于为连接到Informix数据库的Windows程序设置与Informix相关的环境变量。你没有提到你是否使用它来设置任何东西。调查它是否由Informix .NET提供程序使用。

您也没有提到问题出现时是否重新启动AIX机箱上的IDS服务器实例。我假设没有。 (如果分析可能会有所不同。)

控制日期格式的主要环境变量是DBDATE。它需要各种符号,例如:

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

不要使用最后一个。如果DBDAT E的价值发生变化,这可能会解决您的一些问题,设置DBDATE可能会解决您的问题。

如果未设置DBDATE,还有其他影响日期解释的变量;这些包括CLIENT_LOCALEDB_LOCALE,甚至GL_DATE。但是,DBDATE具有最高优先级,是人们通常最常设置的一个。

答案 2 :(得分:0)

在运行报告的客户端应用程序和其他所有客户端中设置DBDATE=MDY4/

答案 3 :(得分:0)

这可能是无关的,但我收到了同样的错误。我最终将SQL中的单引号更改为括号。我使用的是参数化SQL。

SELECT id, descriptor FROM Foo WHERE descriptor >= '?'

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

答案 4 :(得分:0)

DB2 / Informix会覆盖客户端日期格式。您联系Db2管理员并在服务器端设置一次所有日期格式。我们在AS400(DB2)中遇到了完全相同的问题,并且DB管理员从未接受过它,就像你的情况一样。一旦ISO日期格式语法从IBM站点获取并提供给DB2管理员,他就改变了它。之后我们的计划与日期一起工作正常 祝你好运。

答案 5 :(得分:0)

对于您的特定设置可能不是这种情况,但我看到服务器更改了报告给数据库的日期格式,当管理员将其区域设置设置为与默认值不同时,但仅在它们登录时! 您可能希望检查系统上每个用户的国家/地区设置。

答案 6 :(得分:-3)

以root用户而不是informix用户启动informix实例....它解决了我的pb和我的夜晚lol

相关问题