2016-06-23 2 views
0

등록 양식을 만들려고합니다. 이 코드는 사용자 이름이 중복되면 등록을 중지해야합니다.SQL Server 사용자 테이블에 사용자가 있는지 확인하십시오.

실제로이 내용을이 사본에 복사했습니다. answer는 독자적으로 수정하려고 했으므로 어떻게 작동 하는지를 알 수있었습니다.

private void register_user() 
{ 
    con.Open(); 

    bool exist = false; 

    // Command that checks if username exist 
    cmd = new SqlCommand(@"SELECT COUNT(*) FROM users1 WHERE Username = '@username'", con); 

    cmd.Parameters.AddWithValue("@username", txtRegUsername.Text); 

    exist = (int)cmd.ExecuteScalar() > 0; 

    // If user exist gives error 
    if (exist == true) 
     lblResults.Text = "Username already exist!"; 
    else 
    { 
     cmd = new SqlCommand(@"INSERT INTO users1 (Fname, Lname, Mname, 
                Username, Password, email, user_type) 
           VALUES (@first_name, @last_name, @middle_name, 
             @username, @password, @email, @user_type)", con); 

     cmd.Parameters.AddWithValue("@first_name", txtFname.Text); 
     cmd.Parameters.AddWithValue("@last_name", txtLname.Text); 
     cmd.Parameters.AddWithValue("@middle_name", txtMi.Text); 
     cmd.Parameters.AddWithValue("@username", txtRegUsername.Text); 
     cmd.Parameters.AddWithValue("@password", txtRegPassword.Text); 
     cmd.Parameters.AddWithValue("@email", txtEmail.Text); 
     cmd.Parameters.AddWithValue("@user_type", "user"); 

     cmd.ExecuteNonQuery(); 
    } 

    con.Close(); 
} 

내 문제는 내 코드가 존재 이름의 등록을 수 있다는 것입니다 :

여기 내 코드입니다. 전반적인 작업. 대신

SELECT COUNT(*) FROM users1 WHERE Username = '@username' 

사용

SELECT COUNT(*) FROM users1 WHERE Username = @username 

+1

사용자 이름 (데이터베이스)에 고유 한 제한 조건을 설정하고 예외를 catch 할 수 있습니다. – levi

+1

[AddWithValue()를 이미 사용 중지 할 수 있습니까?] (http://blogs.msmvps.com/jcoehoorn/blog/) 체크 아웃해야합니다. (예 : 2014/05/12/can-we-stop-using-addwithvalue-already /)'.AddWithValue()'사용을 중지하면 예상치 못한 놀라운 결과를 초래할 수 있습니다 ... –

답변

5

그렇지 않으면 그 매개 변수 만 Username에 대한 정적 값이 아니다.

사이드 노트 : 어떤 것이 있는지 알고 싶으면 레코드를 계산하지 않습니다.

이 더 효율적입니다 :

SELECT 
    CASE WHEN EXISTS(SELECT 1 FROM users1 WHERE Username = @username) 
     THEN 1 
     ELSE 0 
    END AS DoesUserExist 
+1

IF EXISTS '잠재적으로 수백만 명의 사용자를 세는 대신 특정 사용자가 이미 존재하는지 확인하는 것 –

0

가 .. 희망이 당신을 도울 것입니다 아래 코드를 사용해보십시오.

cmd = new SqlCommand(@"SELECT COUNT(*) FROM users1 WHERE upper(Username) = upper(@username)", con); 
0

존재가 거짓이면 SelectCount의 값을 반환합니다. 다른 사람이 말했듯이

If((int)cmd.ExecuteScalar() > 0) 
{ 
exist=true; 
} 

은 또한 쿼리에 @username에서 '제거로

내가 뭔가를 할 것입니다.

관련 문제