- - PR -
ExecuteReaderについて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-12-17 18:08
こんにちは。VB.NET2003 SQL文作成の中でExecuteReaderを使用して,SELECT文よりある値を
取得し,そのループ文の中で取得したを利用して別のSELECT文を作成したいのですが, ExecuteReaderを閉じてから別のExecuteReaderを呼び出す様に 注意されてしまいます。 "追加情報 : この接続に関連付けられている DataReader が既に開いています。この DataReader を最初に閉じる必要があります" でも最初のループ文の中で処理を行いたいのです! 配列にデータを入れてからその配列の中のループ文の中で ExecuteReaderをよぶしかないのでしょうか? どなたか回避策がありましたら教えて下さい。 Dim myConnString As String = _ "User ID=myUID;password=myPWD;Initial Catalog=pubs;Data Source=mySQLServer" Dim mySelectQuery As String = "SELECT * FROM Titles" Dim myConnection As New SqlConnection(myConnString) Dim myCommand As New SqlCommand(mySelectQuery, myConnection) myConnection.Open() Dim myReader As SqlDataReader = myCommand.ExecuteReader() While myReader.Read() invIPADDR = Trim(myReader.Item("IPADDR")) -----------ここから更に別なSQL文を呼び出したい!---------- Dim mySelectQuery1 As String = "SELECT * FROM Titles where ip='" & invIPADDR & "'" Dim myCommand1 As New SqlCommand(mySelectQuery1, myConnection) Dim myReader1 As SqlDataReader = myCommand1.ExecuteReader() While myReader1.Read() '処理 Loop End While myReader.Close() 'Close the reader. |
|
投稿日時: 2003-12-17 19:01
その1:2回目のループのSqlConnectionを分ける(別物を使う)
その2:1回のSQL発行で片付ける。(同一テーブルをLEFT JOINして) とかではダメでしょうか? その2は仕様的に可能か解りませんが... [ メッセージ編集済み 編集者: KATSU 編集日時 2003-12-17 19:14 ] |
|
投稿日時: 2003-12-19 02:08
DataAdapterを使ったロジックに変更するというのがスペックはともかく、一番手っ取り早く実現は出来そうですね。
|
|
投稿日時: 2003-12-19 06:27
こちらに転記するときに端折っただけとは思いますが。。。
SqlCommandもSqlReaderもSqlConnectionも、外部リソースを使用するものなので、ループの中でこのような使い方をすると、あっという間にリソースを使い果たします。 #Oracleでやると、カーソル数の上限に達しました、になる 必ずDisposeまたはCloseするか、ループの外で作ったものを使い回しましょう。 |
1