2009-07-30 224 views
2

因此,我们有一个运行ERP系统的AIX(ugh)服务器。这个系统内置的报告非常吸引人,所以我当然要负责构建我们需要的报告。日期无效月份 - Informix中的日期格式零星回复

我有很多报道我运行和最当然是特定日期等的编码在基于Windows 2003标准服务器框中在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 

回答

1

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

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

+0

有没有办法第一显示DBDATE的值,然后去改变它。我尝试使用echo $ DBDATE,但是该命令不返回任何内容。我甚至找不到默认的日期格式? – vikifor 2014-10-26 23:36:20

0

呃! .NET不是我的强项 - 你可能不得不适应我说的正确工作。

在Windows上,是好还是坏,有一个名为Setnet32中的Informix的工具,它可以用来设置的Informix相关的环境变量用于连接到Informix数据库的Windows程序。你没有提到你是否用这个设置了任何东西。调查它是否由Informix .NET提供者使用。

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

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

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

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

存在影响日期解释,如果DBDATE没有设置其他变量;这些包括CLIENT_LOCALEDB_LOCALE,甚至GL_DATE。但是,DBDATE具有最高的优先级,并且是大多数人通常设置的最高优先级。

+0

奇怪的是,它并不是在Windows服务器重新启动时发生,而是在AIX中的Informix实例重新启动时发生。 – DarkUnderlord 2009-08-10 20:35:07

0

DBDATE=MDY4/在运行报告和所有其他的客户端以及客户端应用程序。

0

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

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

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

DB2/Informix的覆盖客户机日期格式。您联系您的Db2管理员,并在所有服务器端设置日期格式。我们在AS400(DB2)中遇到了完全相同的问题,DB管理员从未接受过您的情况。一旦从IBM网站获取ISO日期格式语法并将其提供给DB2管理员,他就对其进行了更改。之后,我们的程序与日期一起工作良好。
祝你好运。

0

这可能不是您的特定设置的情况,但我所看到的服务器更改报告给数据库管理员的时候有他们的区域设置为一些不同的充到默认的日期格式,但只有当他们登录! 您可能希望检查系统上每个用户的国家/地区设置。

-3

启动Informix实例为根,而不是Informix用户....它解决了我的PB和我的夜晚笑