これが何らかの形で求められていることは知っていますが、最善の説明を見つけることができません。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 を使用する必要があるのでしょうか (非常に複雑な場合)。