2

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

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

奇怪的是,每当我们启动和停止 Informix 或重新启动服务器等时,似乎 Informix 决定改变它通过 CSDK 处理日期的方式。如果它当前期待 MM/DD/YYYY,那么它最终会在上述情况之后决定是否希望它在 YYYY/MM/DD 中​​。这通常最终会给我一个“Invalid Month in Date”错误。然后我进入我的 dateformat 函数(使我可以轻松地来回切换)并手动更改它。我在处理此错误时构建了一些报告,然后使用其他格式的日期重试相同的查询。这当然不太理想,我想深入了解它!

这是 ASP.net 页面错误中的一些粘贴文本。谢谢!

“/”应用程序中的服务器错误。
错误 [HY000] [Informix .NET 提供程序][Informix] 日期月份无效
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误及其源自代码的位置的更多信息。

异常详细信息:IBM.Data.Informix.IfxException: ERROR [HY000] [Informix .NET provider][Informix]Invalid month in date

源错误:

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


源文件:D:\Inetpub\reports2.oscarwinski.com\App_Code\IMRShipClass.cs 行:481

堆栈跟踪:

[IfxException: 错误 [HY000] [Informix .NET 提供程序][Informix] 日期月份无效]
   IBM.Data.Informix.IfxConnection.HandleError(IntPtr hHandle, SQL_HANDLE hType, RETCODE retcode) +26
   IBM.Data.Informix.IfxCommand.ExecuteReaderObject(CommandBehavior 行为,字符串方法)+654
   IBM.Data.Informix.IfxCommand.ExecuteReader(CommandBehavior 行为)+117
   IBM.Data.Informix.IfxCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior 行为)+4
   System.Data.Common.DbDataAdapter.FillInternal(DataSet 数据集,DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为)+130
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令,CommandBehavior 行为)+287
   System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) +92
   D:\Inetpub\reports2.oscarwinski.com\App_Code\IMRShipClass.cs:481 中的 IMRShipClass.Generate()
   D:\Inetpub\reports2.oscarwinski.com\IMRShip.aspx.cs:114 中的 IMRShip.testIMR()
   D:\Inetpub\reports2.oscarwinski.com\IMRShip.aspx.cs:259 中的 IMRShip.btnExport2Excel_Click1(对象发送者,EventArgs e)
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +111
   System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 eventArgument)+110
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 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(布尔 includeStagesBeforeAsyncPoint,布尔 includeStagesAfterAsyncPoint)+1565


版本信息:Microsoft .NET Framework 版本:2.0.50727.3082;ASP.NET 版本:2.0.50727.3082
4

7 回答 7

1

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

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

于 2009-07-30T21:10:13.800 回答
0

啊!.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

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

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

于 2009-07-30T21:26:23.783 回答
0

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

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

SELECT id, descriptor FROM Foo WHERE descriptor >= (?) 
于 2010-11-17T14:42:56.837 回答
0

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

于 2010-11-23T13:27:03.583 回答
0

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

于 2010-12-12T12:21:57.393 回答
0

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

于 2009-10-10T23:56:35.327 回答
-3

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

于 2016-03-24T15:11:30.493 回答