2

したがって、ERP システムを実行する AIX (ugh) サーバーがあります。このシステムに組み込まれているレポートは最悪なので、もちろん私は必要なレポートを作成する任務を負っています。

私が実行した多くのレポートがありますが、もちろんそのほとんどは特定の日付などに関するものです。コーディングは、Windows 2003 Standard Server ボックス上の ASP.net で実行される C# で行われます。Informix CSDK を使用して、CSDK に付属の .Net Data Adapter 経由で接続します。サーバーは、AIX 5.2 サーバー上で Informix 10 を実行します。

奇妙なのは、Informix を開始および停止したり、サーバーを再起動したりするたびに、Informix が CSDK を介して日付を処理する方法を変更することを決定したように見えることです。現在 MM/DD/YYYY を期待している場合、最終的には上記の状況の後に YYYY/MM/DD でそれが必要であると判断します。これにより、通常、「無効な月の日付」エラーが発生します。次に、dateformat 関数 (簡単に行ったり来たりできるように作成されています) に入り、手動で変更します。このエラーの処理で作成したいくつかのレポートを作成し、別の形式の日付で同じクエリを再試行します。もちろん、これは理想的とは言えません。その真相を突き止めたいと思います。

ASP.net ページ エラーから貼り付けたテキストを次に示します。ありがとう!

「/」アプリケーションでサーバー エラーが発生しました。
ERROR [HY000] [Informix .NET プロバイダ][Informix]日付の月が無効です
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: IBM.Data.Informix.IfxException: ERROR [HY000] [Informix .NET プロバイダー][Informix]日付の月が無効です

ソース エラー:

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


ソース ファイル: 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
   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
   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(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 (ブール値 includeStagesBeforeAsyncPoint、ブール値 includeStagesAfterAsyncPoint) +1565


バージョン情報: Microsoft .NET Framework バージョン:2.0.50727.3082; ASP.NET バージョン:2.0.50727.3082
4

7 に答える 7

1

日付形式は、サーバーではなくクライアントによって制御されます。明らかにデフォルト (US 形式) がありますが、各クライアントは使用したい形式を指定できます。これは、DBDATE環境変数を設定することによって行われます。(GL_DATEロケールを使用している場合もあります。)

日付形式が切り替わった場合は、この環境変数の値を確認する必要があります。状況によっては、ミドルウェアによって設定されていますか?

于 2009-07-30T21:10:13.800 に答える
0

これはおそらく無関係ですが、同じエラーを受け取っていました。最終的に、SQL の一重引用符を括弧に変更しました。パラメータ化されたSQLを使用していました。

SELECT id, descriptor FROM Foo WHERE descriptor >= '?' になる

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

これはあなたの特定の設定には当てはまらないかもしれませんが、管理者がロケールをデフォルトとは異なるものに設定した場合、サーバーがデータベースに報告する日付形式を変更するのを見てきましたが、それは管理者がログインしている間だけです! システム上のすべてのユーザーの国/ロケール設定を確認することをお勧めします。

于 2010-12-12T12:21:57.393 に答える
0

うーん!.NET は私の得意分野ではありません。正しく機能させるには、私の言うことを適応させる必要があるかもしれません。

Windows には、良くも悪くも、Informix データベースに接続する Windows プログラムの Informix 関連の環境変数を設定するために使用できる SETNET32 と呼ばれる 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_LOCALEDB_LOCALE、さらには が含まれますGL_DATE。ただし、DBDATE最も優先度が高く、ほとんどの人が最も通常設定するものです。

于 2009-07-30T21:26:23.783 に答える
0

DB2/Informix は、クライアントの日付形式をオーバーライドします。Db2 管理者に連絡して、サーバー側で日付形式を一度だけ設定します。AS400 (DB2) でまったく同じ問題に直面し、DB 管理者はあなたの場合のようにそれを受け入れませんでした。ISO 日付形式の構文が IBM サイトから取得され、DB2 管理者に渡されると、彼はそれを変更しました。その後、私たちのプログラムは日付で問題なく動作しました。
幸運を。

于 2010-11-23T13:27:03.583 に答える
0

DBDATE=MDY4/レポートと他のすべてのクライアントを実行するクライアント アプリで設定します。

于 2009-10-10T23:56:35.327 に答える
-3

Informix ユーザーの代わりに root として Informix インスタンスを開始します .... それは私の pb と私の夜を解決します笑

于 2016-03-24T15:11:30.493 に答える