2012-06-27 2 views
1

2 개의 폼이 있습니다. 첫 번째 폼에는 사용자 이름, 암호 상자 및 로그인 버튼이 있습니다. 로그인 버튼을 클릭하면 PostgreSQL의 사용자 이름 암호가 비교됩니다. C# 및 PostgresSQL 연결 방법

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(); 
     } 

그래서이 문제 좀 도와주십시오 하지만이 줄

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

에 오류가 발생했습니다이 내 코드입니다.

+0

올바른 데이터베이스에 연결하고 있는지 확인하고, 로그인을 큰 따옴표로 묶으십시오. 그러면 쿼리는 'Select * From "로그인"..... "이되어야합니다. – Habib

+0

글쎄, 당신은 테이블을 가지고 있습니까? 귀하의 데이터베이스에서 '로그인'이라고? –

답변

2

테이블 이름이 올바른지 확인하십시오. 로그인이 맞습니다. 그런데 코드가 SQL 삽입 공격에 취약하기 때문에 입력 값을 필터링해야합니다.

테이블 또는 데이터베이스 이름을 변경해보십시오. 둘 다 로그인이라고하며 문제가 발생할 수 있습니다.

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

로그인이 올바른 경우

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

로그인 테이블 이름을

인 데이터베이스 이름이며, 다음 테이블 로그인가 데이터베이스 LOGIN에 존재하는지 여부를 확인합니다.

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

관계는 포스트 그레스에서 대문자로 시작하는 테이블 이름을 사용할 수 없습니다

또한 의미한다. 대문자로 시작하는 테이블 이름이 있으면 큰 따옴표로 묶어야합니다.

+0

대소 문자 구별도 생각하고있었습니다. 대/소문자 구분 때문에 – spender

+0

감사합니다. – user1479013

+2

... 답변자에게 투표 하시겠습니까? 대답을 수락 하시겠습니까? – spender