2014-01-16 79 views
0

我有2個頁面登錄和註冊。我正在檢查用戶名是否可用,並且我已經爲它寫了一個代碼。但是我無法防止在註冊按鈕上的數據庫中插入相同的用戶名。我怎樣才能做到這一點?我們的代碼page。我已一個linkbutton在註冊頁面級如何防止在asp.net中的註冊頁面上有重複的用戶名

protected void LinkButton1_Click1(object sender, EventArgs e) 
{ 
    conn.Open(); 
    cmd = new SqlCommand("select * from login where username='" + txtname.Text + "'", conn); 
    dr = cmd.ExecuteReader(); 
    if (dr.Read()) 
    { 
     Label1.Text = "Username already exists"; 
    } 
    else 
    { 
     Label1.Text = "Username available"; 
    } 
} 
+0

您將邀請匿名用戶的SQL注入。改用sql-parameters。或者更好 - 看看可用的'SqlMembershipProvider'。那裏有很多教程。 –

+0

快速且骯髒:在數據庫中,在*用戶名*列上創建唯一約束。 – Abhitalks

+0

在你的數據庫中使用flag(布爾變量) –

回答

2

,如果你想與你的代碼,然後 使用IF(EXISTS)粘在你的查詢您應該使用內置在asp.net

仍然MembershipProvider

IF(EXISTS(SELECT * FROM UserMaster WHERE LOWER(UserName) = LOWER('test'))) 
BEGIN 
    SELECT 'TRUE' 
END 
ELSE 
BEGIN 
    SELECT 'FALSE' 
END 

然後最後使用cmd.ExecuteScalar函數來檢查返回值是否爲truefalse

C#代碼:(更新)

conn.Open(); 
    cmd = new SqlCommand(@" IF(EXISTS(SELECT * FROM UserMaster WHERE LOWER(UserName) = LOWER(@username))) 
    BEGIN 
     SELECT 'TRUE' 
    END 
    ELSE 
    BEGIN 
     SELECT 'FALSE' 
    END", conn); 
    cmd.Parameters.AddWithValue("@username", "test"); 
    bool exists = Convert.ToBoolean(cmd.ExecuteScalar()); 
    if (exists) 
    { 
     Label1.Text = "Username already exists"; 
    } 
    else 
    { 
     Label1.Text = "Username available"; 
    } 
+0

你確定這會工作嗎? –

+0

它的工作原理!但容易受到SQL注入攻擊 –

+0

這就是我期待的答案... –

相關問題