tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSQLServerからのデータの取得方法
記事No5445
投稿日: 2007/05/08(Tue) 17:27
投稿者くわ
お世話になっております
くわと申します

 VB2005でSQLServer2000へ接続して
 テーブルからデータセットを取得するロジックを共通化して
 SQL分を引数として渡すと結果のデータセットを戻したいのですが

 データ リーダーが閉じているときに、無効な操作 MetaData をしようとしました。
 というエラーが出てしまいます

 VB2005をはじめて間もないのでまったく検討違いな事をしてしまってますでしょうか
 VB6のレコードセットの様にはできないのでしょうか?
 
 ご教授いただければ幸いです

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Dim dr As SqlClient.SqlDataReader

        Dim aa As String

        dr = get_tantousha("SELECT * FROM 担当者マスタ WHERE 担当者番号 = '001'")

        aa = dr.Item("担当者名")  ←ここでエラーがでます

    End Sub


    Private Function get_tantousha(ByVal strSqlCmd As String) As SqlClient.SqlDataReader

        Dim Cn As New SqlClient.SqlConnection

        Dim cmd As New SqlClient.SqlCommand

        Dim dr As SqlClient.SqlDataReader

        Cn.ConnectionString = "Data Source=192.168.120.xx;Initial Catalog=GS_T_TEST;User ID=sa;Password=sa;"

        Cn.Open()

        cmd.Connection = Cn
        cmd.CommandText = strSqlCmd

        get_tantousha = cmd.ExecuteReader

        Cn.Close()

    End Function

[ツリー表示へ]
タイトルRe: SQLServerからのデータの取得方法
記事No5446
投稿日: 2007/05/08(Tue) 17:42
投稿者くわ
申し訳ありませんでした
自己解決しました
板を汚してしまってごめんなさい

[ツリー表示へ]
タイトルRe: SQLServerからのデータの取得方法
記事No5447
投稿日: 2007/05/08(Tue) 17:44
投稿者魔界の仮面弁士
Connection を保持しておいてください。DataReader はデータをメモリにキャッシュしないため、
接続を開き続けていないと取得できません。

> VB6のレコードセットの様にはできないのでしょうか?
あれ。VB6 でも、Recordset の操作中に Connection を Close することはできませんよね?

まぁ、切断型 Recordset (静的バッチカーソルモード) を用いれば、
VB6 でも Connection を切断できますが、その機能を ADO.NET に求める場合は、
DataReader ではなく、DataSet を用いることになります。

[ツリー表示へ]
タイトルRe^2: SQLServerからのデータの取得方法
記事No5448
投稿日: 2007/05/08(Tue) 17:58
投稿者くわ
> Connection を保持しておいてください。DataReader はデータをメモリにキャッシュしないため、
> 接続を開き続けていないと取得できません。
>
> > VB6のレコードセットの様にはできないのでしょうか?
> あれ。VB6 でも、Recordset の操作中に Connection を Close することはできませんよね?
>
> まぁ、切断型 Recordset (静的バッチカーソルモード) を用いれば、
> VB6 でも Connection を切断できますが、その機能を ADO.NET に求める場合は、
> DataReader ではなく、DataSet を用いることになります。

魔界の仮面弁士様ありがとうございます
おっしゃるとおりでした

[ツリー表示へ]