当用户在注册页面输入用户名时,我正在检查数据库表中的用户名。文本框OnTextChanged事件已触发,检查用户名是否已存在。 这是代码:
public void HandleTextbox1OnTextChanged(Object sender, EventArgs e)
{
string _connString = ConfigurationManager.AppSettings["connString"];
string username = txtUserName.Text;
int result = 0;
using (SqlConnection conn = new SqlConnection(_connString))
{
conn.Open();
SqlCommand cmd = new SqlCommand("select * from ref_CourseRegistration_Users where nm_UserName=@nm_UserName", conn);
cmd.Parameters.AddWithValue("@nm_UserName", username);
cmd.ExecuteNonQuery();
result = (int)cmd.ExecuteScalar();
if (result > 0)
{
lblMessage.Text = "username already exists, please enter different User Name!";
lblMessage.ForeColor = Color.Red;
}
else
{
}
}
}
当用户名存在时,它工作正常但是当用户名不存在时,它会显示错误"对象引用未设置为对象的实例。" 如果我遗失了什么?
答案 0 :(得分:3)
您希望查询中具有相同名称的用户数量,因此您应该选择它:
从代码中删除行cmd.ExecuteNonQuery();
,您已使用cmd.ExecuteScalar();
,这很好。
您的选择应返回一个数字,因此您应该选择一个数字:
select COUNT(*) from ref_CourseRegistration_Users where nm_UserName=@nm_UserName
如果不这样做,您将从查询中获取null,并且由于您没有处理它而导致结尾出现空引用异常。