2009-07-30 44 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和我的夜晚笑