我有注册页面,我想检查数据库中是否已存在用户名,或者是否存在于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;
}
答案 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 + " ' "
。第二个'
周围的空格,特别是前面的空格可能会导致用户名不符合预期。