我想检查用户名是否已存在于我的数据库表中?

时间:2013-04-09 09:57:31

标签: c# asp.net 3-tier

我有注册页面,我想检查数据库中是否已存在用户名,或者是否存在于3层架构中。

MyRegistration.cs:

public static int checkusername(string user_txt)
 {
  int id2 = 0;
  string selectstr = "select * from xyz where UserName = '" + user_txt + " ' ";
  id2 = DataAccessLayer.ExecuteReader(selectstr);
  return id2;    
 }

以及文本框的onclick事件背后的代码

protected void txt_username_TextChanged(object sender, EventArgs e)
 {
  if (!string.IsNullOrEmpty(txt_username.Text))
   {
    int id = xyz.checkusername(txt_username.Text.Trim());
    if (id > 0)
     {
      lblStatus.Text = "UserName Already Taken";
     }
    else
     {
      lblStatus.Text = "UserName Available";
     }
   } 

 }

DataAccessLayer:

public static int ExecuteReader(string Query)
 {
  SqlConnection con = new SqlConnection();
  con.ConnectionString = GetConnectionString();
  con.Open();
  int id = 0;            
  SqlCommand cmd = new SqlCommand();
  cmd.CommandText = Query;
  cmd.CommandType = System.Data.CommandType.Text;
  cmd.Connection = con;
  SqlDataReader reader = cmd.ExecuteReader();
  while (reader.Read())
   {
    id++;
   }
  cmd = null;
  reader.Close();
  con.Close();
  return id;
 }

3 个答案:

答案 0 :(得分:2)

通常如果"选择查询"如果找不到带有参数user_txt的userName,那么id2将以值-1结束。所以适当的代码是:

           if (id ==-1)
               {
                   lblStatus.Text = "UserName Available";
               }
           if (id>0)
               {

                   lblStatus.Text = "UserName Already Taken";
               }

顺便说一句,您的代码非常不安全,您的数据库可以使用SQL Injection轻松攻击我建议您了解此问题并向查询添加参数以防止它。 C#有办法实现这一点。不要尝试修复对数据库的访问,只需从记录SQL注入开始。

答案 1 :(得分:2)

我已编辑了一些代码,如下所示......它会帮助你......

文字更改事件:

    protected void txt_username_TextChanged(object sender, EventArgs e)
    {
        if (!string.IsNullOrEmpty(txt_username.Text))
        {
            if (xyz.checkusername(txt_username.Text.Trim()))
            {
                lblStatus.Text = "UserName Already Taken";
            }
            else
            {
                lblStatus.Text = "UserName Available";
            }
        }

    }

检查用户名:

    public bool CheckUsername(string user_txt)
    {
        bool Result;
        Result = DataAccessLayer.ExecuteReader(user_txt);
        return Result;
    }

执行读者:

    public bool ExecuteReader(string user_txt)
    {
        SqlConnection con = new SqlConnection();
        con.ConnectionString = GetConnectionString();
        con.Open();
        SqlCommand cmd = new SqlCommand("select * from xyz where UserName = @UserID", con);
        SqlParameter param = new SqlParameter();
        param.ParameterName = "@UserID";
        param.Value = user_txt;
        cmd.Parameters.Add(param);
        SqlDataReader reader = cmd.ExecuteReader();
        if (reader.HasRows)
            return true;
        else
            return false;
    }

答案 2 :(得分:0)

正如其他人所提到的,这种方法存在潜在的严重安全问题。

但是,您的问题可能在user_txt + " ' "。第二个'周围的空格,特别是前面的空格可能会导致用户名不符合预期。