从数据库中删除datagridview中的选定行

时间:2019-01-27 20:11:48

标签: sql sql-server vb.net

我正在尝试删除用户使用SQL Server在datagridview中选择的行。

我有一个datagridview,它加载数据库的内容,在这种情况下为UsernamePassword。 请记住,每个用户名在数据库中都是唯一的,因此我应该能够使用唯一的用户名删除每一行。

我目前使用的SQL是DELETE FROM 'Users&Passwords' WHERE 'Username' = ?,我不确定这是否完全正确,但是,每当我单击QueryBuilder时,它似乎都接受。

我必须尝试执行的代码如下:

    Private Sub btn_remove_Click(sender As Object, e As EventArgs) Handles btn_remove.Click
        For Each row As DataGridViewRow In DataGridView1.SelectedRows
            Dim usernametodelete As String = DataGridView1.SelectedRows(0).Cells(0).Value.ToString
            'TextBox1.Text += usernametodelete
            Me.Users_PasswordsTableAdapter.DeleteUser(usernametodelete)
            Me.Users_PasswordsTableAdapter.Fill(Me.ManageUsersDataSet._Users_Passwords)
        Next
    End Sub

我希望当用户单击Remove User(s)按钮时,从datagridview中选择的行将从数据库中删除行。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

您的参与程度超出了您的需要。您理想的步骤是:

0)重命名您的表,以便其中没有&字符-只是在找麻烦

1)使用以下过程将表添加到数据集中:右键单击设计图面,新建表适配器,配置连接字符串,将查询设置为SELECT * FROM Users WHERE Username LIKE @username,确保设置了其他内容,例如是否想生成dbdirect方法,以及是否要数据集刷新新值

2)在数据源窗口中(默认情况下可能不会显示,请在Visual Studio的菜单中找到它),将“用户”节点从数据源窗口中拖放到表单上。这将创建绑定到类型化数据表的datagridview,还创建一个数据集,tableadapter,tableadaptermanager(并非严格需要;可以删除),一个绑定导航器工具条(再次并非严格要求,但上面有一个方便的预接线保存按钮)和一个绑定源。它还会将一些代码预填充到form_load事件处理程序中,以填充数据表

3)就是这样-您的表单具有网格,该网格绑定到数据表。该网格能够删除行-单击行标题,然后按键盘上的Delete按钮,行消失。单击工具栏中的“保存”图标,更改将保存到数据库中。您唯一要做的就是首先将数据放入表中。我提供了一个SQL,允许您选择一些要加载的用户名,但是您可以通过将Form_Load中的代码行更改为以下内容来轻松地使其全部加载:

yourTableAdapterName.Fill(yourDatasetname.YourDatatableName, "%")

将百分数作为名称传递就像在DOS中使用*通配符。 LIKE%将选择所有记录。当然,您也可以保留默认设置(它将引用工具栏上的文本框),而是运行程序,将%放入工具栏上的文本框中,然后单击“填充”。或者,您可以在文本框中输入JOHNSMITH或JOHN%并填充,以分别加载该用户/这些用户。

希望您已经做过1和2。

有关所有这些东西如何工作的一些背景故事:

DataTables是数据库中表的客户端表示形式。并不是要它们包含数据库中的所有数据,而只是要处理其中的一部分。从数据库加载行时,可以对其进行编辑,删除(标记为已删除),并且在调用tableAdapter.Update(yourtable)时所做的更改将保留在数据库中。请注意,即使它被称为Update,该方法也将保存新行(通过执行INSERT),删除行(SQL DELETE)和进行更新(SQL UPDATE)。如果您的数据表从数据库中抽取了4行,然后添加了2行,则对已加载的行中的3行进行更改,并删除第4行,然后调用tableadapter.Update将所有这些更改保存到数据库中。您不需要选择数据表,而是相应地调用tableadapter.insert / update / delete来手动保留这些更改。因此,使用表适配器的流程是:

tableAdapter.Fill(datatable, maybe,parameters,to,control,the,fill,here)  

'work with the datatable here, change, insert, delete. Use loops/code, use the UI, etc

tableAdapter.Update(datatable) 'save changes

答案 1 :(得分:0)

 I suggest putting an id column in your datagridview and just hide it so that you can easily delete the record you want to remove easily without conflict, because if you will use a username, what if theres a duplicate username exist.



   Private Sub BTNDELETE_Click(sender As Object, e As EventArgs) Handles BTNDELETE.Click
                Public result As Integer = 0
                Public cmd As New MySqlCommand
                strcon.Open() 'your connection string here
                With cmd
                    .Connection = strcon 'your connection string
                    .CommandText = "DELETE FROM `users` WHERE `id` = '" & DTGLIST.CurrentRow.Cells(0).Value.ToString() & "';"
                    result = cmd.ExecuteNonQuery
                    If result > 0 Then
                       MsgBox("Successfully Removed.", MsgBoxStyle.Information, "Info")
                       DTGLIST.Rows.Remove(DTGLIST.SelectedRows(0))
                    End If
                End With
                strcon.Close() 'close the connection string
        End Sub

答案 2 :(得分:0)

设法弄清楚为什么几天前我的删除查询不起作用。这是由于我的SQL不正确。这对我DELETE FROM [Users&Passwords] WHERE (Username = ?)有效。

在我的代码中还包含行Me.Users_PasswordsTableAdapter.DeleteUser(usernametodelete)使其起作用。