J'essaye de supprimer les lignes que l'utilisateur sélectionne dans un datagridview en utilisant SQL Server.

J'ai un datagridview qui charge le contenu de la base de données, dans ce cas Username et Password. Gardez à l'esprit que chaque nom d'utilisateur est unique dans la base de données et que je devrais donc pouvoir supprimer chaque ligne en utilisant le nom d'utilisateur unique.

Le SQL que j'ai actuellement est DELETE FROM 'Users&Passwords' WHERE 'Username' = ? Je ne suis pas sûr que ce soit tout à fait correct, mais chaque fois que je clique sur QueryBuilder, il semble l'accepter.

Le code que je dois essayer et faire est le suivant:

    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

Je voudrais que lorsque l'utilisateur clique sur le bouton Remove User(s), les lignes sélectionnées de la datagridview suppriment les lignes de la base de données. Toute aide serait grandement appréciée.

0
SchmellerMeller 27 janv. 2019 à 23:11

3 réponses

Meilleure réponse

J'ai réussi à comprendre pourquoi ma requête de suppression ne fonctionnait pas il y a quelques jours. C'était parce que mon SQL n'était pas correct. Cela a fonctionné pour moi DELETE FROM [Users&Passwords] WHERE (Username = ?).

Avoir aussi la ligne Me.Users_PasswordsTableAdapter.DeleteUser(usernametodelete) dans mon code l'a fait fonctionner.

0
SchmellerMeller 4 févr. 2019 à 10:52
 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
1
Erdz Wardex 29 janv. 2019 à 01:25

Vous vous impliquez légèrement plus que nécessaire. L'ensemble des étapes que vous suivriez idéalement serait:

0) Renommez votre table pour qu'elle ne contienne pas de caractère & - cela ne fait que poser des problèmes

1) Ajoutez votre table à votre ensemble de données avec quelque chose comme ce processus: faites un clic droit sur l'aire de conception, un nouvel adaptateur de table, configurez la chaîne de connexion, définissez la requête sur SELECT * FROM Users WHERE Username LIKE @username, assurez-vous que d'autres éléments sont définis, comme si vous souhaitez générer dbdirect méthodes et si vous souhaitez que l'ensemble de données actualise les nouvelles valeurs

2) Dans la fenêtre de vos sources de données (peut ne pas s'afficher par défaut, trouvez-la dans l'un des menus de Visual Studio), faites glisser et déposez le nœud Users de la fenêtre de données soruces, sur le formulaire. Cela créera un datagridview lié au datatable typé, et créera également un ensemble de données, un tableadapter, un tableadaptermanager (pas strictement nécessaire; peut supprimer), une bande d'outils de bindingnavigator (encore une fois pas strictement nécessaire mais a un bouton Enregistrer pré-câblé pratique) et une source de liaison. Il pré-remplira également du code dans le gestionnaire d'événements form_load pour remplir la table de données

3) C'est tout - votre formulaire a une grille, liée à un datatable. Cette grille est capable de supprimer des lignes - cliquez sur l'en-tête de ligne et appuyez sur le bouton de suppression du clavier, la ligne disparaît. Cliquez sur l'icône d'enregistrement dans la bande d'outils et la modification est conservée dans la base de données. La seule chose que vous ayez à faire est de placer les données dans le tableau en premier lieu. J'ai donné un SQL qui vous permet de choisir des noms d'utilisateurs à charger, mais vous pouvez facilement le faire charger le tout en changeant la ligne de code dans Form_Load en:

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

Passer un pourcentage comme nom est comme un caractère générique * sous DOS. LIKE% sélectionnera tous les enregistrements. Vous pouvez également, bien sûr, laisser la disposition par défaut (elle référencera une zone de texte sur la barre d'outils) et à la place exécuter le programme, mettre un% dans la zone de texte de la barre d'outils et cliquer sur Remplir. Ou vous pouvez mettre JOHNSMITH, ou JOHN% dans la zone de texte et remplir, pour charger respectivement cet utilisateur / ces utilisateurs

J'espère que vous avez déjà fait 1 et 2 ..

Un peu d'histoire sur le fonctionnement de tout cela:

Les DataTables sont des représentations côté client des tables de la base de données. Il n'est pas prévu qu'ils contiennent toutes les données de la base de données, mais seulement une partie de celles-ci avec lesquelles vous souhaitez travailler. Lorsque vous chargez une ligne à partir de la base de données, vous pouvez la modifier, la supprimer (marquer comme supprimée) et lorsque vous appelez tableAdapter.Update(yourtable) les modifications que vous avez effectuées sont conservées dans la base de données. Notez que même si elle s'appelle Update, la méthode enregistrera de nouvelles lignes (en faisant un INSERT), des lignes supprimées (SQL DELETE) et effectuera des mises à jour (SQL UPDATE). Si votre table de données a 4 lignes ajoutées à partir de la base de données, et que vous ajoutez ensuite 2 nouvelles lignes, apportez des modifications à 3 des lignes chargées et supprimez la quatrième ligne, puis appeler tableadapter.Update enregistrera toutes ces modifications dans la base de données. Vous n'êtes pas obligé de parcourir votre table de données, en appelant tableadapter.insert / update / delete en conséquence, pour conserver manuellement ces modifications. Le flux d'utilisation d'un tableadapter est donc:

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
Caius Jard 27 janv. 2019 à 20:51