2012-06-27 6 views
1

J'ai 2 formulaires, le premier1 a un nom d'utilisateur, un mot de passe et un bouton de connexion. lorsque je clique sur le bouton de connexion, il compare le mot de passe du nom d'utilisateur dans PostgreSQL. Mais je suis erreur avec cette ligneComment se connecter C# et PostgresSQL

NpgsqlDataReader dr = cmd.ExecuteReader(); [ ERROR: 42P01: relation "login" does not exist ]

Ceci est mon code:

private void button1_Click(object sender, EventArgs e) 
    { 
     bool blnfound = false; 
     NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;User Id=postgres;Password=admin123;Database=Login"); 
     conn.Open(); 
     NpgsqlCommand cmd = new NpgsqlCommand("SELECT * FROM login WHERE name='" + tb1.Text + "' and password = '" + tb2.Text + "'",conn); 
     NpgsqlDataReader dr = cmd.ExecuteReader(); 

     if (dr.Read()) 
     { 
      blnfound = true; 
      Form2 f5 = new Form2(); 
      f5.Show(); 
      this.Hide(); 
     } 

     if (blnfound == false) 
     { 
      MessageBox.Show("Name or password is incorrect", "Message Box", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1); 
      dr.Close(); 
      conn.Close(); 
     } 

Alors, s'il vous plaît aidez-moi à ce problème.

+0

assurez-vous que vous vous connectez à la bonne base de données, essayez également d'inclure la connexion entre guillemets donc la requête devrait être 'Select * From" login ".....' – Habib

+0

Eh bien, êtes-vous sûr que vous avez une table nommé 'login' dans votre base de données? –

Répondre

2

Vérifiez votre base de données si le nom de la table Login est correct. En passant, vous devez filtrer vos valeurs d'entrée, car votre code est vulnérable aux attaques par injection SQL.

Vous devriez également essayer de changer votre nom de table ou de base de données, ils sont tous les deux appelés connexion, ce qui peut causer des problèmes.

1
Server=127.0.0.1;Port=5432;User Id=postgres;Password=admin123;**Database=Login** 

Connexion est le nom de base de données

"SELECT * FROM **login** WHERE name='" + tb1.Text + "' and password = '" + tb2.Text + "'",conn 

Connexion est le nom de la table

Si cela est correct, puis vérifiez si la table connexion, existe dans la base de données LOGIN.

ERROR: 42P01: relation "login" does not exist 

Relation signifie Tableau

En outre, vous ne pouvez pas utiliser des noms de table en commençant par Majuscules dans Postgres. Si vous avez un nom de table commençant par Majuscules, vous devez le placer entre guillemets.

+0

Je pensais aussi à la sensibilité à la casse. – spender

+0

merci, en raison de la casse. – user1479013

+2

... alors donnez votre chance au voteeur? Accepter la réponse? – spender