2014-01-16 83 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

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

相关问题