- PR -

System.ArgumentOutOfRangeExceptionについて

投稿者投稿内容
川崎
常連さん
会議室デビュー日: 2003/05/02
投稿数: 25
投稿日時: 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
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-05-18 16:22
googleで検索してみましょう。

http://www.google.co.jp/search?q=System.ArgumentOutOfRangeException+System.DateTime.TimeToTicks
川崎
常連さん
会議室デビュー日: 2003/05/02
投稿数: 25
投稿日時: 2004-05-18 16:36
お返事ありがとうございます。

一応、Googleで検索ヒットしたページはすべて
日本語/英語問わず目を通したつもりですが、
有効な情報のあるページを探すことができませんでした。

なお、通常はこのエラーは発生しないのですが、
しばらく使用しているとたまに発生致します。
また全然エラー発生しない環境もあります。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-18 17:55
ミリ秒の指定を外せば?
川崎
常連さん
会議室デビュー日: 2003/05/02
投稿数: 25
投稿日時: 2004-05-18 18:37
Jittaさん、いつも助けていただきありがとうございます。

NLS_TIME_FORMAT=HH24:MI:SSXFF 等の "xFF"部分はたしかに不要です。
ここがなにかしら悪さをしていたのかもしれません。

NLS_TIME_FORMATをHH24:MI:SSにしてみようと思います。
NLS_TIME_FORMATは今まで変更したことが無いのですが、変更する上で
注意する点がもしありましたらアドバイス戴けると助かります。

当エラーが発生する環境が私のほうにありませんので、結果をお知らせする
のは少し時間(期間)がかかるかと思います。

ありがとうございました。
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-05-18 19:13
引用:

川崎奈々子さんの書き込み (2004-05-18 16:36) より:
一応、Googleで検索ヒットしたページはすべて
日本語/英語問わず目を通したつもりですが、
有効な情報のあるページを探すことができませんでした。



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
川崎
常連さん
会議室デビュー日: 2003/05/02
投稿数: 25
投稿日時: 2004-05-18 19:32
todoさん、すみませんでした。

Oracle Provider for OLEDB から ODP.NETに切り替えることは
無理そうなので、SELECT文の結果にDATETIME型が含まれないように
(文字に変換)してみようと思います。

この方法だとプログラム修正個所が非常に多いので、あまりやりたく
なかったのですが、PG修正してみます。

結果はまたお知らせします。
どうもありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-05-19 08:45
引用:

川崎奈々子さんの書き込み (2004-05-18 19:32) より:

Oracle Provider for OLEDB から ODP.NETに切り替えることは
無理そうなので、SELECT文の結果にDATETIME型が含まれないように
(文字に変換)してみようと思います。


 Oracle Provider for OLEDBを使って、日付型を扱っていますが、今のところ問題は発生していません(1年稼働)。タイムスタンプ型は使ってないなぁ。

 Oracleのセッション変数ではなく、OSの環境変数にセットしてはいかがですか?

スキルアップ/キャリアアップ(JOB@IT)