我正在尝试使用 vb.net 中的阅读器检索一些数据。检索每一行的某些数据列没有任何问题,但我想检索每一行中的所有数据。我已经用 getstring() 命令尝试了几个不同的东西,但它没有用,而且我似乎找不到任何帮助来解决这个问题。我的代码是这样的
Private Function QueryDown(ByVal queryString)
Dim returnInfo As New StringBuilder
Try
Dim newQuery As String() = Split(queryString, ":")
For Each Query In newQuery
Dim cmd As New MySqlCommand(Query, connection1)
Dim reader As MySqlDataReader
reader = cmd.ExecuteReader()
While reader.Read()
For a = 0 To reader.FieldCount
Dim strng As String = reader.GetString(a)
returnInfo.Append(strng & ",")
Next
returnInfo.Append(";")
End While
reader.Close()
Next
Catch ex As Exception
console("Error with MySQL: " & ex.Message)
Return ex.Message
End Try
Return returnInfo.ToString
End Function
抱歉,我在使用这段代码时遇到的错误是
There is already an open DataReader associated with this Connection which must be closed first
但是如果我将 getstring(a)
更改为 getstring(1)
一切都很好,我很困惑。
这里的任何帮助都会很棒,我想格式化代码以返回 column,column,coloumn;nextrow,如您所见(我希望)。因为我的每个表都有不同数量的列,所以我希望能够为每个表使用相同的功能。再次感谢。
最佳答案
上限是 reader.FieldCount - 1
而不是 reader.FieldCount
在:
For a = 0 To reader.FieldCount - 1
当 a
到达 reader.FieldCount
时出现异常 => reader.Close()
未执行 => 我想你调用这个函数(或另一个)用相同的连接打开一个新的阅读器 => 错误。
当您调用 getstring(1)
时,它会起作用,因为 1
在 [0, FieldCount-1]
内
更新:
正如 @Zach Green 所说,尽可能始终使用 using
来替代 try...finally{ .Dispose() }
:finally
中的 dispose 应用于 对象 beeing“used”
并调用 DataReader/DataConnection
它将调用 .Close()
为您服务。
关于mysql - vb net SQl查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5621125/