- - PR -
System.ArgumentOutOfRangeExceptionについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-05-18 15:46
お世話になっております。川崎と申します。
VB.NETでWEBアプリ開発をおこなっておりますが、SELECT文を発行すると下記エラーが発生する場合があり 対処にこまっております。どんな情報でもよいので恐れ入りますがどなたかご教授ください。 <環境> Win2000Server(SP4) Oracle9.2.0.1 Oracle Provider for OLEDB 9.2.0.2.0 .Net Framework 1.1 <エラーの内容> System.ArgumentOutOfRangeException: 指定された引数は、有効な値の範囲内にありません。 パラメータ名 : Hour、Minute および Second パラメータが表現できない DateTime を示しています。 at System.DateTime.TimeToTicks(Int32 hour, Int32 minute, Int32 second) at System.Data.OleDb.DBBindings.Get_DBTIMESTAMP(IntPtr buffer) at System.Data.OleDb.DBBindings.get_Value_DBTIMESTAMP() at System.Data.OleDb.DBBindings.get_Value() at System.Data.OleDb.OleDbDataReader.GetValues(Object[] values) at System.Data.Common.SchemaMapping.LoadDataRow(Boolean clearDataValues, Boolean acceptChanges) at System.Data.Common.DbDataAdapter.FillLoadDataRow(SchemaMapping mapping) at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords) at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior) at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable) <オラクルパラメータ> NLS_DATE_FORMAT=RR-MM-DD NLS_DATE_LANGUAGE=JAPANESE NLS_TIMESTAMP_FORMAT=RR-MM-DD HH24:MI:SSXFF NLS_TIMESTAMP_TZ_FORMAT=RR-MM-DD HH24:MI:SSXFF TZR NLS_TIME_FORMAT=HH24:MI:SSXFF NLS_TIME_TZ_FORMAT=HH24:MI:SSXFF TZR | ||||
|
投稿日時: 2004-05-18 16:22
googleで検索してみましょう。
http://www.google.co.jp/search?q=System.ArgumentOutOfRangeException+System.DateTime.TimeToTicks | ||||
|
投稿日時: 2004-05-18 16:36
お返事ありがとうございます。
一応、Googleで検索ヒットしたページはすべて 日本語/英語問わず目を通したつもりですが、 有効な情報のあるページを探すことができませんでした。 なお、通常はこのエラーは発生しないのですが、 しばらく使用しているとたまに発生致します。 また全然エラー発生しない環境もあります。 | ||||
|
投稿日時: 2004-05-18 17:55
ミリ秒の指定を外せば?
| ||||
|
投稿日時: 2004-05-18 18:37
Jittaさん、いつも助けていただきありがとうございます。
NLS_TIME_FORMAT=HH24:MI:SSXFF 等の "xFF"部分はたしかに不要です。 ここがなにかしら悪さをしていたのかもしれません。 NLS_TIME_FORMATをHH24:MI:SSにしてみようと思います。 NLS_TIME_FORMATは今まで変更したことが無いのですが、変更する上で 注意する点がもしありましたらアドバイス戴けると助かります。 当エラーが発生する環境が私のほうにありませんので、結果をお知らせする のは少し時間(期間)がかかるかと思います。 ありがとうございました。 | ||||
|
投稿日時: 2004-05-18 19:13
Googleのキャッシュも見ました? dbforumsでは set session NLS_DATE_FORMAT to YYYY-MM-DD HH24:MI:SS が効かない。 ODP.NET 9204に切り替えれば解決する という話です。 http://www.dbforums.com/showthread.php?t=802537&page=2&pp=15 | ||||
|
投稿日時: 2004-05-18 19:32
todoさん、すみませんでした。
Oracle Provider for OLEDB から ODP.NETに切り替えることは 無理そうなので、SELECT文の結果にDATETIME型が含まれないように (文字に変換)してみようと思います。 この方法だとプログラム修正個所が非常に多いので、あまりやりたく なかったのですが、PG修正してみます。 結果はまたお知らせします。 どうもありがとうございました。 | ||||
|
投稿日時: 2004-05-19 08:45
Oracle Provider for OLEDBを使って、日付型を扱っていますが、今のところ問題は発生していません(1年稼働)。タイムスタンプ型は使ってないなぁ。 Oracleのセッション変数ではなく、OSの環境変数にセットしてはいかがですか? |