- PR -

DataSet取得エラー

1
投稿者投稿内容
未記入
会議室デビュー日: 2007/09/25
投稿数: 13
投稿日時: 2007-09-25 09:28
<環境>
 Microsoft .NET Framework 1.1
Oracle9.2

通常は、エラーなく動くのですが、処理が集中してくると
OracleにSelectを発行する所で、DataSet取得エラーという、
SQLエラーになってしまいます。
通常は動いているので、SQL文等には問題ないと思うのですが、
何か.NETの設定等が必要なのでしょうか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-09-25 09:53
引用:

未記入さんの書き込み (2007-09-25 09:28) より:

通常は、エラーなく動くのですが、処理が集中してくると
OracleにSelectを発行する所で、DataSet取得エラーという、
SQLエラーになってしまいます。
通常は動いているので、SQL文等には問題ないと思うのですが、
何か.NETの設定等が必要なのでしょうか?


例外の詳細な内容を教えてください。
たぶん高負荷時に耐えられない SQL が悪いんだと思いますよ。

_________________
かるあ のメモスニペット
未記入
会議室デビュー日: 2007/09/25
投稿数: 13
投稿日時: 2007-09-25 10:27
SQL文を下に記述します。
やはり、SQL文が複雑なのが悪いのでしょうか?


[2007/09/21 17:04:33][ERROR]Beams:Mainexception.
Type={System.Web.HttpUnhandledException}
Msg={種類 System.Web.HttpUnhandledException の例外がスローされました。}
StackTrace=
{ at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain()
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at System.Web.CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)}
innerException.
Type={eSqlException}
Msg={DataSet取得エラー
SQL:
select decode(KI.項目1,'9999999',KI.項目2,JS.項目3) as 項目
,KI.項目4
,KI.項目5
,KI.項目6
,decode(CM.項目7||CM.項目8||NVL(CM.項目9,'')||CM.項目10
,'1010','A'
,'1000','B'
,'100','C'
,'1110','D'
,'1101','E'
,'111','F'
,'1100','G'
,'110','H'
,'0000','I'
,'0010','J'
,'000','K'
,'0101','L'
,'0100','M'
,'0111','N'
,'011','O'
,'0110','P'
,'010','Q'
,''
)as 項目11
,decode(CM.項目12||CM.項目13||NVL(CM.項目14,'')||CM.項目15
,'1010','A'
,'1000','B'
,'100','C'
,'1110','D'
,'1101','E'
,'111','F'
,'1100','G'
,'110','H'
,'0000','I'
,'0010','J'
,'000','K'
,'0101','L'
,'0100','M'
,'0111','N'
,'011','O'
,'0110','P'
,'010','Q'
,''
)as 項目16
from テーブル1 KI
,テーブル2 M1
,テーブル3 CM
,テーブル4 JS
,テーブル5 VH
,テーブル6 VB
,テーブル7 MS
,(select WB.項目1
from テーブル8 WB
,テーブル9 WU
Where WU.項目1='XXXXXX'
and WU.項目='0'
and WB.項目=WU.項目
union
select TM.項目
from テーブル10 TM
,テーブル11 SJ
Where TM.項目='XXXXXXX'
and TM.項目='0'
and SJ.項目='0'
and SJ.項目<>'0'
and SJ.項目=TM.項目
)CHK
where KI.項目='0'
and(KI.項目 is null or KI.項目 > to_char(sysdate,'YYYY/MM/DD'))
and KI.項目=CHK.項目
and JM1.項目(+)='0'
and JM1.項目(+)='1'
and JM1.項目(+)=KI.項目
and KI.項目=CM.項目(+)
and CM.項目(+)='0'
and KI.項目=JS.項目(+)
and KI.項目=JS.項目(+)
and KI.項目=VH.項目(+)
and KI.項目=VB.項目(+)
and JM1.項目=MS.項目(+)
System: 無効な列索引が指定されました。
[GetDataSet()]}
StackTrace=
{ at ASP.Common.Database.DBOracle.GetDataSetSelect(String pstrDataSet)
at ASP.Common.Database.DB.GetDataSetSelect(String pstrDataSet)
at XXXXX.XXXXXW.LF_Search(String pKbn)
at XXXXX.XXXXXW.btnSearch_Click(Object sender, EventArgs e)
at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
at System.Web.UI.Page.ProcessRequestMain()}
innerException.
Type={System.IndexOutOfRangeException}
Msg={無効な列索引が指定されました。}
StackTrace=
{ at Oracle.DataAccess.Client.OracleDataReader.GetFieldType(Int32 i)
at Oracle.DataAccess.Client.OracleDataReader.GetValue(Int32 i)
at Oracle.DataAccess.Client.OracleDataReader.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 Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at ASP.Common.Database.DBOracle.GetDataSetSelect(String pstrDataSet)}
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-09-25 11:01
引用:

未記入さんの書き込み (2007-09-25 10:27) より:

やはり、SQL文が複雑なのが悪いのでしょうか?


SQL 自体はそれほど複雑ではないようですが、マルチバイト文字を列名に使っている場合は "" で囲んであげたほうがいいですよ。
あとはどのフィールドのデータを取得しようとして例外が出ているのかがわかるといいですね。
_________________
かるあ のメモスニペット
未記入
会議室デビュー日: 2007/09/25
投稿数: 13
投稿日時: 2007-09-25 11:27
ご回答ありがとうございます。

やはり、環境でどうこう出来る問題ではなく、SQL文の方なんでしょうか?
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2007-09-25 13:33
引用:

未記入さんの書き込み (2007-09-25 11:27) より:

やはり、環境でどうこう出来る問題ではなく、SQL文の方なんでしょうか?


これだけだと原因が何か分からないのでログを出力するなりして、トレースする必要があると思います。 StackTrace を見ると GetDataSetSelect というメソッドの周辺で何か起きているみたいなので、このあたりをチェックしてみてはどうでしょう。

で、繰り返しですが、 SQL にマルチバイト文字を使う場合は "" を入れないとおかしな動作をしますよ。
_________________
かるあ のメモスニペット
1

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