Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Visual Studio 2013的ListView中从MySQL中删除一行_Mysql_Vb.net - Fatal编程技术网

在Visual Studio 2013的ListView中从MySQL中删除一行

在Visual Studio 2013的ListView中从MySQL中删除一行,mysql,vb.net,Mysql,Vb.net,我几乎完成了一个从MySQL数据库中添加、编辑和删除内容的试用程序 但我似乎无法让删除按钮正常工作 这是我的删除按钮代码: If IDNo = Nothing Then MsgBox("Please choose an item to delete.", MsgBoxStyle.Exclamation) Else Dim sqlQuery As String = "DELETE FROM tbl_adbms_test WHERE IDNo='" & IDNo &

我几乎完成了一个从MySQL数据库中添加、编辑和删除内容的试用程序

但我似乎无法让删除按钮正常工作

这是我的删除按钮代码:

If IDNo = Nothing Then
    MsgBox("Please choose an item to delete.", MsgBoxStyle.Exclamation)
Else
    Dim sqlQuery As String = "DELETE FROM tbl_adbms_test WHERE IDNo='" & IDNo & "'"
    Dim sqlCommand As New MySqlCommand

    With sqlCommand
        .CommandText = sqlQuery
        .Connection = sConnection
        .ExecuteNonQuery()
    End With

    MsgBox("Successfully deleted an item.", MsgBoxStyle.Information)

    Me.LoadPeople()
End If
错误

这是我的主要表单的其余部分。

Imports MySql.Data.MySqlClient
公共级frm_main 公共连接作为新的MySqlConnection 公共IDNo为整数

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If sConnection.State = ConnectionState.Closed Then
        sConnection.ConnectionString = "SERVER = localhost; USERID = root; PASSWORD = loadedro; DATABASE = adbms_test_db"
    End If

    LoadPeople()
End Sub

Public Sub LoadPeople()
    Dim sqlQuery As String = "SELECT * FROM tbl_adbms_test"
    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

    list_view_people.Items.Clear()

    For i = 0 To TABLE.Rows.Count - 1
        With list_view_people
            .Items.Add(TABLE.Rows(i)("IDNo"))
            With .Items(.Items.Count - 1).SubItems
                .Add(TABLE.Rows(i)("LastName"))
                .Add(TABLE.Rows(i)("FirstName"))
            End With
        End With
    Next
End Sub

Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_add.Click
    frm_add.ShowDialog()
End Sub

Private Sub btn_modify_Click(sender As Object, e As EventArgs) Handles btn_modify.Click
    If IDNo = Nothing Then
        MsgBox("Please choose a record to modify.", MsgBoxStyle.Exclamation)
    Else
        Dim sqlQuery As String = "SELECT LastName, FirstName FROM tbl_adbms_test WHERE IDNo='" & list_view_people.SelectedItems(0).Text & "'"
        Dim sqlAdapter As New MySqlDataAdapter
        Dim sqlCommand As New MySqlCommand
        Dim sqlTable As New DataTable

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

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

        frm_modify.IDNo = list_view_people.SelectedItems(0).Text
        frm_modify.LastName = sqlTable.Rows(0)("LastName")
        frm_modify.FirstName = sqlTable.Rows(0)("FirstName")
        frm_modify.ShowDialog()
    End If
End Sub

Private Sub list_view_people_MouseClick(sender As Object, e As MouseEventArgs) Handles list_view_people.MouseClick
    IDNo = list_view_people.SelectedItems(0).Text
End Sub

Private Sub btn_delete_Click(sender As Object, e As EventArgs) Handles btn_delete.Click
    If IDNo = Nothing Then
        MsgBox("Please choose an item to delete.", MsgBoxStyle.Exclamation)
    Else
        Dim sqlQuery As String = "DELETE FROM tbl_adbms_test WHERE IDNo='" & IDNo & "'"
        Dim sqlCommand As New MySqlCommand

        With sqlCommand
            .CommandText = sqlQuery
            .Connection = sConnection
            .ExecuteNonQuery()
        End With

        MsgBox("Successfully deleted an item.", MsgBoxStyle.Information)

        Me.LoadPeople()
    End If
End Sub
末级

添加表单

Public Class frm_add
Public sConnection As New MySqlConnection
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If sConnection.State = ConnectionState.Closed Then
        sConnection.ConnectionString = "SERVER = localhost; USERID = root; PASSWORD = loadedro; DATABASE = adbms_test_db"
    End If
End Sub

Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_save.Click
    If sConnection.State = ConnectionState.Closed Then
        sConnection.ConnectionString = "SERVER = localhost; USERID = root; PASSWORD = loadedro; DATABASE = adbms_test_db"
        sConnection.Open()
    End If

    Dim sqlQuery As String = "INSERT INTO tbl_adbms_test(IDNo,LastName,FirstName) VALUES(NULL,'" & txt_last_name.Text & "','" & txt_first_name.Text & "')"
    Dim sqlCommand As New MySqlCommand

    With sqlCommand
        .CommandText = sqlQuery
        .Connection = sConnection
        .ExecuteNonQuery()
    End With

    MsgBox("The data was saved.", MsgBoxStyle.Information)
    Dispose()
    Close()
    frm_main.LoadPeople()
End Sub
Imports MySql.Data.MySqlClient
末级

编辑表单

Public Class frm_add
Public sConnection As New MySqlConnection
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    If sConnection.State = ConnectionState.Closed Then
        sConnection.ConnectionString = "SERVER = localhost; USERID = root; PASSWORD = loadedro; DATABASE = adbms_test_db"
    End If
End Sub

Private Sub btn_save_Click(sender As Object, e As EventArgs) Handles btn_save.Click
    If sConnection.State = ConnectionState.Closed Then
        sConnection.ConnectionString = "SERVER = localhost; USERID = root; PASSWORD = loadedro; DATABASE = adbms_test_db"
        sConnection.Open()
    End If

    Dim sqlQuery As String = "INSERT INTO tbl_adbms_test(IDNo,LastName,FirstName) VALUES(NULL,'" & txt_last_name.Text & "','" & txt_first_name.Text & "')"
    Dim sqlCommand As New MySqlCommand

    With sqlCommand
        .CommandText = sqlQuery
        .Connection = sConnection
        .ExecuteNonQuery()
    End With

    MsgBox("The data was saved.", MsgBoxStyle.Information)
    Dispose()
    Close()
    frm_main.LoadPeople()
End Sub
Imports MySql.Data.MySqlClient
公共类frm\U修改 友元IDNo为整数 好友姓氏作为字符串 Friend FirstName作为字符串

Public sConnection As New MySqlConnection
Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    txt_last_name.Text = LastName
    txt_first_name.Text = FirstName
End Sub

Private Sub btn_update_Click(sender As Object, e As EventArgs) Handles btn_update.Click
    If sConnection.State = ConnectionState.Closed Then
        sConnection.ConnectionString = "SERVER = localhost; USERID = root; PASSWORD = loadedro; DATABASE = adbms_test_db"
        sConnection.Open()
    End If

    Dim sqlQuery As String = "UPDATE tbl_adbms_test SET LastName='" & txt_last_name.Text & "', FirstName='" & txt_first_name.Text & "' WHERE IDNo='" & IDNo & "'"
    Dim sqlCommand As New MySqlCommand

    With sqlCommand
        .CommandText = sqlQuery
        .Connection = sConnection
        .ExecuteNonQuery()
    End With

    MsgBox("Record updated successfully.", MsgBoxStyle.Information)
    Dispose()
    Close()
    frm_main.LoadPeople()
End Sub
末级


提前感谢。:)

在执行删除命令之前,您没有打开连接。
在代码中保留全局连接对象时,这是一种常见的情况。
你什么也得不到,总有一些情况下,你会以错误的状态结束连接

你可以写

Dim sqlQuery As String = "DELETE FROM tbl_adbms_test WHERE IDNo=@id"
if sConnection.ConnectionState = ConnectionState.Closed Then
   sConnection.Open
End If 
Dim sqlCommand As New MySqlCommand
With sqlCommand
    .CommandText = sqlQuery
    .Connection = sConnection
    .Parameters.AddWithValue("@id", IDNo)
    .ExecuteNonQuery()
End With
但我确实建议您删除对全局连接对象的使用,并将其替换为本地MySqlConnection,该连接将在您使用它时创建,并在使用后关闭/销毁。这是的预期用途


还请注意,我已经删除了sqlQuery中的字符串连接,并使用了更安全的参数化方法(尽管在这种情况下,如果ListView不可编辑,则不会有sql注入的实际风险)

非常感谢。你帮了大忙。我一定会考虑你的建议。我将彻底摆脱我的全球联系。再次感谢D