tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataReader が既に開いています
記事No612
投稿日: 2004/01/13(Tue) 18:00
投稿者Dai
[OSのVer]:Windows XP   [VBのVer]:VB.NET 

MasCmd2 = New OleDb.OleDbCommand(MasSql2, MasCn)
MasReader2 = MasCmd2.ExecuteReader()  ← ここで下記のエラーが表示されます。
実行時例外がスローされました : System.InvalidOperationException - この接続に関連付けられて
いる DataReader が既に開いています。この DataReader を最初に閉じる必要があります。    

これはどういった意味でしょうか?
Oracleを参照するコンソールアプリケーションを作成しています。
 

[ツリー表示へ]
タイトルRe: DataReader が既に開いています
記事No613
投稿日: 2004/01/14(Wed) 09:57
投稿者よねKEN
[OSのVer]:Windows    [VBのVer]:VB.NET  

> MasCmd2 = New OleDb.OleDbCommand(MasSql2, MasCn)
> MasReader2 = MasCmd2.ExecuteReader()  ← ここで下記のエラーが表示されます。
> 実行時例外がスローされました : System.InvalidOperationException - この接続に関連付けられ

> いる DataReader が既に開いています。この DataReader を最初に閉じる必要があります。    


ExecuteReaderメソッドでリーダを取得して、データを取り出している個所がいくつかあると思いますが

データ取り出し処理の後に、Closeメソッドを呼んで後処理をしていない(個所がある)のでしょう。

きちんとすべてのリーダは使い終わったらCloseしましょう。

Closeしていないから、接続MasCnを使って取得したリーダのどれかが開きっぱなしですよ、
というエラーです。

[ツリー表示へ]
タイトルRe^2: DataReader が既に開いています
記事No614
投稿日: 2004/01/14(Wed) 10:16
投稿者Dai
大まかな全体フローはこんな感じです。
※ 実は接続先を MasCn,MasCn2 と分けたら回避出来たのですが
  それが正当なやり方とも思えなかったので (^。^;)

*******************************************

       '接続開始
        MasCn.ConnectionString = "Provider=MSDAORA;" & _
                                "Persist Security Info=False;" & _
                                "User ID=*****;" & _
                                "Password=******;" & _
                                "Data Source=******"
        MasCn.Open()

        'TB_SHUPPYO SELECT
     MasSql = "SELECT HINMEI,RYAKUBAN,SEIBAN,ZUBAN,CHUBAN,NOUKI FROM TB_SHUPPYO  " & _
              "WHERE BUHIN_CD = '3101' "

        MasCmd = New OleDb.OleDbCommand(MasSql, MasCn)
        MasReader = MasCmd.ExecuteReader()

        Do While (MasReader.Read())
                     'MasReader処理  

           'TB_SHUPPYO SELECT_2
             MasSql2 = "SELECT HINMEI,RYAKUBAN,SEIBAN FROM TB_SHUPPYO  " & _
                    "WHERE BUHIN_CD != '3101' AND SEIBAN = '" & SEIBAN & "'"

      MasCmd2 = New OleDb.OleDbCommand(MasSql2, MasCn)
      MasReader2 = MasCmd2.ExecuteReader()
      Do While (MasReader2.Read())
        'MasReader2処理
      Loop

      MasReader2.Close()
      MasReader2 = Nothing
        Loop

        MasReader.Close()
        MasReader = Nothing

        '接続終了
        MasCn.Close()

[ツリー表示へ]