VB.NET & SQL,在调用 Read() 之前尝试访问字段无效



我试图添加一些按钮到我的表单与数据库信息附加到他们,以改变他们的名称,颜色等

我得到这个错误:MySql.Data.MySqlClient。MySqlException: '在调用Read()之前访问字段无效'每次我试图从数据库中读取并添加到我的按钮。

下面是我的代码:

Dim sql = "SELECT ProjectName, CompletedStatus, Startdate FROM projects WHERE inGroup = @currentgroup AND StartDate = " & Today.ToString("yyyy-MM-dd")
Dim cmd As New MySqlCommand(sql, cn)
Dim reader
With cmd
.Connection.Open()
.Parameters.AddWithValue("@currentgroup", c.getmembergroup)
reader = .ExecuteReader
End With
For i = 1 To count
reader.read
Dim b As New Button
With b
.Text = reader.item("ProjectName")
End With
Me.Controls.Add(b)
Next

这个问题发生在reader。read在For循环的内部和外部。

这里,count是一个变量,有按钮的数量,它已经被测试过了,我知道它做了它应该做的。

我已经确保SQL中的名称与数据库中的名称匹配,并且数据类型是正确的。

声明cmd的'cn'变量只是我的连接,我把它省略了,因为它看起来不相关。

连接已打开。提前感谢,如果你需要更多的信息,请让我知道,我是新来的,所以我不确定我是否给了足够的。

尝试如下:

Public Sub GetData(ByVal currentGroup As String, ByVal startDate As DateTime)
Dim sql As String = "SELECT ProjectName, CompletedStatus, Startdate FROM projects WHERE inGroup = @currentgroup AND StartDate = @startdate"
Using con As MySqlConnection = New MySqlConnection(ConnectionStr)
'open 
con.Open()
Using cmd As MySqlCommand = New MySqlCommand(sql, con)
Dim paramCurrentGroup As New MySqlParameter
With paramCurrentGroup
.MySqlDbType = MySqlDbType.String
.ParameterName = "@currentgroup"
.Value = currentGroup
End With
'add parameter
cmd.Parameters.Add(paramCurrentGroup)
Dim paramStartDate As New MySqlParameter
With paramStartDate
.MySqlDbType = MySqlDbType.DateTime
.ParameterName = "@startDate"
.Value = startDate
End With
'add parameter
cmd.Parameters.Add(paramStartDate)
Using reader As MySqlDataReader = cmd.ExecuteReader()
While reader.Read()
Dim projectName As String = reader.Item("ProjectName")
System.Diagnostics.Debug.WriteLine("projectName: " & projectName)
Dim b As New Button
With b
.Text = projectName
End With
Me.Controls.Add(b)
End While
End Using
End Using
End Using
End Sub

:

  • Using Statement (Visual Basic)

最新更新