0

これが何らかの形で求められていることは知っていますが、最善の説明を見つけることができません。DBから1行を取得し、それを「そのまま」返すMySql DataReader関数があります。データを別の場所で処理したいからです

Private Function GetRow(ByVal sql As String) As MySqlDataReader

    Dim cmd As New MySqlCommand

    Try

        cmd.Connection = New MySqlConnection() With {.ConnectionString = connString}
        cmd.CommandText = sql
        cmd.CommandType = CommandType.Text

        cmd.Connection.Open()

        Using dr As MySqlDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

            If dr.HasRows Then

                dr.Read()

            End If

            Return dr

        End Using

    Catch ex As MySqlException

        MsgBox(("Error #" & ex.Number & " while reading from DB has occurred: ") + vbCrLf + ex.Message, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Error!")

    Finally

        cmd.Connection.Close()
        If cmd IsNot Nothing Then cmd.Dispose()

    End Try

    Return Nothing

End Function 

関数を使用するたびに、接続が開かれたままになる (プーリングが無効になる) ため、MySqlDataReader の「using」ステートメントを使用し始め、「最終的に」接続自体を破棄しました。しかし、現在、関数は常に DR を何も返さずに返します。おそらく、Read() の結果を「使用して」破棄します。

問題は、Read() 行全体を「そのまま」渡すにはどうすればよいかということです。TableAdapter を使用して、期待される結果が 1 行であっても DataTable を渡すことができるのに、なぜまだ Reader を使用する必要があるのでしょうか (非常に複雑な場合)。

4

1 に答える 1

0

閉じてください。ここで、ディクショナリをリターンとして使用するエレガントなソリューションを見つけまし た DataReader の結果を VB.NET の配列に格納する

優秀な、

于 2013-01-26T12:08:44.847 に答える