2017-08-14 3 views
1

J'essaye de mettre à jour la valeur d'une colonne en utilisant Npgsql (PostgreSQL) et Visual Studio 2015. Ceci est un "Mot de passe oublié?" forme.Essayer de mettre à jour la colonne sur C# en utilisant Npgsql

L'utilisateur doit entrer deux variables pour effectuer la réinitialisation (une condition if): 1. entrer le SSN (aka RG au Brésil); et 2. entrez un code spécifique à l'utilisateur qui n'est pas modifiable. Ce qui se passe est: quand j'essaie de changer la valeur (en utilisant la commande ci-dessous), rien ne se passe.

NpgsqlCommand command = new NpgsqlCommand("UPDATE dbschema.dbtable SET senha = '" + textBox2.Text + "' WHERE rg = '" + textBox2.Text + "'"); 

La condition if exécute parfaitement (je créé l'égalité si la commande à une boîte de message, où il montre que le mot de passe a été réenclenché avec succès - un signe que la condition if a en effet été exécutée) - la seule chose qui doesn La mise à jour du mot de passe (qui pourrait être une caractéristique mineure dans la version, car je préfère me réinitialiser sur la base de données) ne se produit pas en ce moment. J'ai essayé plusieurs changements dans le code, sans succès pour le moment.

Merci d'avance pour l'aide.

Lucas

+0

Il est pas très clair ce que vous êtes en train de poser. Si vous dites que votre requête ne met pas à jour la base de données, vérifiez votre saisie ou essayez de coder en dur la valeur que vous recherchez. Il est préférable d'utiliser une requête paramétrée également; votre commande existante est vulnérable à l'injection SQL. Comme dernier commentaire, vous utilisez 'textbox2.Text' dans les deux valeurs de la commande SQL - cela ne semble pas correct. –

+0

J'essaie de mettre à jour une valeur dans la colonne "mot de passe" en vérifiant le code utilisateur unique et le SSN. Toutefois, la valeur n'est pas mise à jour lorsque je clique sur le bouton "Mettre à jour le mot de passe". –

+0

Il semble que vous stockiez des mots de passe en tant que texte brut dans une base de données, ce qui est un gros drapeau rouge en matière de sécurité. – Alejandro

Répondre

0

Vous devez ouvrir en fait une connexion de base de données et exécutez la commande, par exemple .:

using (var conn = new NpgsqlConnection(<connection string>)) { 
    var command = new NpgsqlCommand("UPDATE dbschema.dbtable SET senha = '" + textBox2.Text + "' WHERE rg = '" + textBox2.Text + "'", conn); 
    conn.Open(); 
    command.ExecuteNonQuery(); 
} 

Notez que la façon dont vous passez des paramètres est également ouvert aux attaques par injection SQL. Vous devriez regarder les requêtes paramétrées.

+0

Ouais, j'ai ouvert. Juste omis car pensé que ce n'était pas important sur le contexte ... –

+0

BTW: NpgsqlConnection con = new NpgsqlConnection ("Serveur = localhost; Port = 5432; Identifiant utilisateur = admin; Mot de passe = databasepw; Base de données = dbdb;"); con.Open(); –

+0

Avez-vous associé la connexion à la commande? –

0

Avez-vous essayé d'exécuter NpgsqlCommand?

En outre, vous feriez mieux d'utiliser des requêtes paramétrées.

Voir cet exemple: INSERT data from Textbox to Postgres SQL

+0

J'ai utilisé un code similaire à celui que j'ai utilisé pour la connexion. Comme il envoie les données à PostgreSQL avec succès (et absorbe les données sur les boîtes de texte correctement dans ce cas) ... mais je vais essayer votre suggestion maintenant. Tks! –