我知道有人问过这个问题,但我真的找不到最好的解释。我有一个 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 使用“使用”语句,以及“最终”处理连接本身。但是现在该函数总是返回 DR 什么都没有,可能是“使用”处理 Read() 结果。
现在的问题是如何“按原样”传递 Read() 整行?如果我可以使用 TableAdapter 并为 1 行预期结果传递 DataTable,我为什么还要使用 Reader(如果如此复杂)?