2010-12-10 5 views
0

로그인 버튼을 클릭하면 if 대신 else의 코드가 실행됩니다.처음 로그인 할 때 초보자입니다. 도움이 필요합니다.

실종 된 사람이 도와 줄 수 있습니까?

여기 내 코드입니다 :

SqlConnection cn = new SqlConnection(@"Data Source=COMPAQ-PC-PC\SQLEXPRESS;Initial Catalog=Gym;Integrated Security=True"); 
     string SQL = "select username,password from login where username like '" + tbUserName.Text + "' and password like '" + tbPassword.Text + "'"; 
     SqlCommand cmd = new SqlCommand(SQL, cn); 
     if (cn.State == ConnectionState.Closed) 
     { 
      cn.Open(); 
     } 
     int roweffect = cmd.ExecuteNonQuery(); 
     if (roweffect > 0) 
     { 
      Form2 login_Success = new Form2(); 
      login_Success.ShowDialog(); 
     } 
     else 
     { 
      MessageBox.Show("Please provide the correct username and password", "Invalaid Username OR Password", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
     } 

    } 
+0

더 roweffect 변수 값을 가져옵니다 -1 ... 나는 ExecuteNonQuery는 통화에서 –

+1

SELECT 문은 항상 반환 이유를 잘 모릅니다 -1 때문에 hasnt는 모든 행에 영향을 미칩니다. –

+0

누가 행에 영향을 줍니까? –

답변

1

Using 문을 사용하여 시도하고 ExecuteScalar는 아마도

using (SqlConnection cn = new SqlConnection(
      @"Data Source=COMPAQ-PC-PC\SQLEXPRESS;Initial Catalog=Gym;Integrated Security=True")) 
{ 
    SqlCommand cmd = new SqlCommand(
     string.Format(@"select username,password 
         from login where username like '{0}' 
         and password like '{1}'", 
          tbUserName.Text, tbPassword.Text), cn); 
    cn.Open(); 
    if (cmd.ExecuteScalar() == null) 
     MessageBox.Show("Please provide the correct username and password", 
      "Invalaid Username OR Password", 
      MessageBoxButtons.OK, MessageBoxIcon.Warning); 
    else 
    { 
     Form2 login_Success = new Form2(); 
     login_Success.ShowDialog(); 
    } 
} 
+0

runscalar()가 더 좋거나 executequery()입니까 ?? –

+0

왜 sqlconnection을 사용하기 전에 사용 했습니까? –

+1

ExecuteQuery는 업데이트를 수행하지 않는 한 -1을 반환합니다 (저는 믿습니다). ExecuteScalar는 첫 번째 행의 첫 번째 열을 반환하며 쿼리에 결과가 있는지 확인하는 좋은 테스트입니다. Using 문에서 SqlConection을 사용하면 올바르게 처리되고 연결 개체가 연결 풀로 반환됩니다. –

2

ExecuteNonQuery는이 SELECT 문에 대한 행 수를 반환하지 않습니다. ExecuteNonQuery

UPDATE, INSERT 들어

및 문을 삭제 반환 값은 명령에 의해 영향을 행 수이다. 트리거 삽입되거나 업데이트되는 테이블에 존재하면 반환 값은 삽입 또는 업데이트 동작 및 트리거 또는 트리거 영향 행의 수 모두에 영향 행의 수를 포함한다. 다른 모든 유형의 문에 대한 반환 값은 -1입니다. 롤백이 발생하면 반환 값은 -1입니다.

대신 ExecuteScalar를 사용하고 결과가 null인지 확인할 수 있습니다.

0

cmd.ExecuteQuery()를 사용하십시오.

관련 문제