从DB表中检查值时,对象引用未设置为对象错误的实例

时间:2014-04-28 07:18:58

标签: c# asp.net sql-server visual-studio-2013

当用户在注册页面输入用户名时,我正在检查数据库表中的用户名。文本框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
        {

        }
    }
}

当用户名存在时,它工作正常但是当用户名不存在时,它会显示错误"对象引用未设置为对象的实例。" 如果我遗失了什么?

1 个答案:

答案 0 :(得分:3)

您希望查询中具有相同名称的用户数量,因此您应该选择它:

从代码中删除行cmd.ExecuteNonQuery();,您已使用cmd.ExecuteScalar();,这很好。

您的选择应返回一个数字,因此您应该选择一个数字:

select COUNT(*) from  ref_CourseRegistration_Users where nm_UserName=@nm_UserName

如果不这样做,您将从查询中获取null,并且由于您没有处理它而导致结尾出现空引用异常。