我试图在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
抱歉,使用此代码时出现的错误是
已经有一个开放的DataReader 与此Connection相关联 必须先关闭
但如果我将getstring(a)
更改为getstring(1)
,一切都很好,我很困惑。
这里的任何帮助都会很棒,我想格式化代码返回列,列,coloumn; nextrow,你可以看到(我希望)。因为我的每个表都有不同数量的coloumns,我希望能够为每个表使用相同的功能。再次感谢。
答案 0 :(得分:2)
上限为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应用于object beeing "used"
DataReader/DataConnection
并呼吁.Close()
它会为您致电{{1}}。