vb net SQl查询问题

时间:2011-04-11 12:17:16

标签: mysql vb.net

我试图在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,我希望能够为每个表使用相同的功能。再次感谢。

1 个答案:

答案 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}}。