- - PR -
OleDbDataReaderで2つの
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2002-11-05 12:31
.NETのOleDbDataReaderについて
データベースからデータを取得するのにOleDbDataReaderを 使用し以下のようにして記述しています。 Public Const gstrCon = "Provider=SQLOLEDB;" & _ "Server=aaa;" & _ "UID=sa;" & _ "Database=aadb;" Public dbConn As OleDbConnection dbConn = New OleDbConnection(gstrCon) dbConn.Open() Dim dbCmd As OleDbCommand Dim auReader As OleDbDataReader Dim sqlText As String dbCmd = dbConn.CreateCommand() sqlText = "SELECT * FROM JST101" sqlText = sqlText & " WHERE TOKUCD ='" & Trim(txtTOKUCD.Text) & "'" dbCmd.CommandText = sqlText auReader = dbCmd.ExecuteReader() If auReader.Read() Then txtTOKUCD.Text = auReader("TOKUCD") txtTOKUNM.Text = auReader("TOKUNM") @ここ Dim dbCmd2 As OleDbCommand Dim auReader2 As OleDbDataReader dbCmd2 = dbConn.CreateCommand() sqlText = "SELECT * FROM JST102" sqlText = sqlText & " WHERE TOKUCD ='" & auReader("TOKUCD") & "'" dbCmd2.CommandText = sqlText auReader2 = dbCmd.ExecuteReader() If auReader2.Read() Then 処理・・・・・・・・・・・・・・・ End If End If auReader.Close() そこでもう1つのReaderを@のところで使用したいのですが 1つのコネクションでは以下のメッセージがでて使用できませんでした。 「この接続に関連付けられている DataReader が既に開いています。この DataReader を最初に閉じる必要があります。」 この場合にはもう1つコネクションを生成するか、最初のReaderを閉じなければ 読み込みできないのでしょうか? このようなDBを入れ子で読む場合にはどのようなロジックが最適なのでしょうか? 教えてください | ||||
|
投稿日時: 2002-11-05 13:14
こんにちは。
やっていることがよく見えないのですが・・・ テーブルJST101 TOKUCD TOKUNM テーブルJST102 TOKUCD とあって、JST101.TOKUCDとJST102.TOKUCDは関係しているんですね?それなら、ただ単に、 SELECT (「JST101.」と修飾した、JST101の列), (「JST102.」と修飾した、JST102の列) FROM JST101, JST102 WHERE JST101.TOKUCD = JST102.TOKUCD AND (その他の条件) でいいのでは? | ||||
|
投稿日時: 2002-11-05 13:46
すみません。それは例です(^^;
2つのリーダを1つのコネクションで使いたかったのです。 調べていたら http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpguide/html/cpcontheadonetdatareader.asp やっぱりReaderは1つのコネクションでは複数作れないことがわかりました。 単にSQLを結合して書けばいいのですが、お化けみたいなSqlになってしまうので なにか良い方法があったらと思いまして投稿しました。 もし読み込みながら他のデータを読み込みしたい場合にはもう1つコネクションを 生成しようかと思います。 | ||||
|
投稿日時: 2002-11-06 05:00
sqlText = "SELECT * FROM JST101" sqlText &= " WHERE TOKUCD ='" & Trim(txtTOKUCD.Text) & "';" sqlText &= "SELECT * FROM JST102" sqlText &= " WHERE TOKUCD ='" & auReader("TOKUCD") & "'" のように2個のSELECTを同時に実行させて複数のDataReaderを生成します。 2番目のDataReaderは、NextResultメソッドで取得します。 myReader.NextResult() Happy Programming! Akio Kasai |
1