Mysql VB.NET中位置0处没有行

Mysql VB.NET中位置0处没有行,mysql,vb.net,listview,Mysql,Vb.net,Listview,我的项目中有这3个表单,在第二个表单上有这个编辑按钮,我将在第三个表单上编辑Listview项目,但是当我在Listview中选择一个项目并按edit时,会显示一个错误。我花了几个小时才找到问题所在,最后我来到了这里。我错过什么了吗 这是我的第一个包含listview的表单 Imports MySql.Data.MySqlClient Public Class Form5 Public cd As Integer Dim con As MySqlConnection Private Sub F

我的项目中有这3个表单,在第二个表单上有这个编辑按钮,我将在第三个表单上编辑Listview项目,但是当我在Listview中选择一个项目并按edit时,会显示一个错误。我花了几个小时才找到问题所在,最后我来到了这里。我错过什么了吗

这是我的第一个包含listview的表单

Imports MySql.Data.MySqlClient
Public Class Form5

Public cd As Integer
Dim con As MySqlConnection
Private Sub Form5_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim con As New MySqlConnection
    con.ConnectionString = "server=localhost;user id=root;database=db;password=root"
    con.Open()
    LoadPeople()
End Sub
Public Sub LoadPeople()
    Dim sConnection As New MySqlConnection
    sConnection.ConnectionString = "server=localhost;user id=root;database=db;password=root"
    sConnection.Open()
    Dim sqlQuery As String = "select * from candidate where cfname<>'Select a Candidate' AND candidacy='Filed'"
    Dim sqlAdapter As New MySqlDataAdapter
    Dim sqlCommand As New MySqlCommand
    Dim TABLE As New DataTable
    Dim i As Integer


    With sqlCommand
        .CommandText = sqlQuery
        .Connection = sConnection
    End With

    With sqlAdapter
        .SelectCommand = sqlCommand
        .Fill(TABLE)
    End With

    LvPeople.Items.Clear()

    For i = 0 To TABLE.Rows.Count - 1
        With LvPeople
            .Items.Add(TABLE.Rows(i)("idn"))
            With .Items(.Items.Count - 1).SubItems
                .Add(AddFieldValue(TABLE.Rows(i), ("cpos")))
                .Add(AddFieldValue(TABLE.Rows(i), ("cfname")))
                .Add(AddFieldValue(TABLE.Rows(i), ("cmname")))
                .Add(AddFieldValue(TABLE.Rows(i), ("clname")))
                .Add(AddFieldValue(TABLE.Rows(i), ("cparty")))
            End With
        End With
    Next

End Sub

Private Function AddFieldValue(ByVal row As DataRow, ByVal fieldName As String) As String
    If Not DBNull.Value.Equals(row.Item(fieldName)) Then
        Return CStr(row.Item(fieldName))
    Else
        Return Nothing
    End If
End Function

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Form17.Show()
End Sub
End Class
还有我的第三份表格

在Button1\u单击中,您正在访问DataTable的第一个DataRow,而不检查是否有:

Form23.cfname = sqlTabble.Rows(0)("cfname")
Form23.cfname = sqlTabble.Rows(0)("cmname")
Form23.cfname = sqlTabble.Rows(0)("clname")
您可以使用DataTable.Rows属性检查是否有一行:

If sqlTabble.Rows.Count > 0 Then
    Form23.cfname = sqlTabble.Rows(0)("cfname")
    Form23.cfname = sqlTabble.Rows(0)("cmname")
    Form23.cfname = sqlTabble.Rows(0)("clname")
End If
由于您试图根据用户的选择获取所有记录,我猜您使用了错误的字段。您正在使用显示字段,但正在按ID字段进行筛选:

"SELECT * FROM candidate WHERE cid = '" & lvPeople3.SelectedItems(0).Text & "'"
也许这就是你真正想要的:

"SELECT * FROM candidate WHERE cfname = '" & lvPeople3.SelectedItems(0).Text & "'"

请注意,您不应使用字符串连接,而应使用sql参数来阻止sql注入。

但它没有给出所需的结果,当我单击第二个表单上的“编辑”按钮时会显示错误,但使用该按钮时,它什么也不做,我知道我缺少了什么,但我不知道它是什么,因为这就像编辑按钮无法读取第三个表单上的数据库,反之亦然。hmmm.@摩天大楼:学习使用调试器。然后,您可以在调试器中执行相关的代码行,以查看发生了什么。您是否看到我怀疑您的sql查询是否按正确的列进行过滤?我的假设正确吗?
"SELECT * FROM candidate WHERE cid = '" & lvPeople3.SelectedItems(0).Text & "'"
"SELECT * FROM candidate WHERE cfname = '" & lvPeople3.SelectedItems(0).Text & "'"