Получение "Ссылка на объект не установлена в экземпляр объекта". ошибка

Когда я запускаю код, и я помещаю неправильный идентификатор пользователя, он не отображает сообщение об ошибке "Логин неверен". Скорее я получаю сообщение об ошибке:

string Password = Pass.ExecuteScalar().ToString();

Таким образом, я получаю эту ошибку "Ссылка на объект не установлена в экземпляр объекта".

protected void btn_login_Click(object sender, EventArgs e)
 {
 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationCTIConnectionString"].ConnectionString);
 conn.Open();
 string checkuser = "Select count(*) from [tblEmployee] where UserID= '" + txt_userID + "'";

 SqlCommand com = new SqlCommand(checkuser, conn);
 int temp = Convert.ToInt32(com.ExecuteScalar().ToString());
 conn.Close();
 if (temp != 1)
 {
 conn.Open();
 string checkPassword = "Select Password from [tblEmployee] where UserID= @ID";
 SqlCommand Pass = new SqlCommand(checkPassword, conn);
 Pass.Parameters.Add(new SqlParameter("ID", txt_userID.Text));
 string Password = Pass.ExecuteScalar().ToString();
 if (!String.IsNullOrEmpty(Password) || Password.Trim().Length == 0)

 if (Password == txt_password.Text)
 {
 Session["New"] = txt_userID.Text;
 Response.Write("Password is correct.");
 Response.Redirect("~/Homepage.aspx");
 }
 else
 {
 Response.Write("Incorrect Password");
 }
 }
 else
 {
 Response.Write("Login is incorrect.");
 conn.Close();
 }


 }
2 ответа

ExecuteScalar() возвращает null, если ничего не найдено, и null.ToString() недействителен. Вместо этого попробуйте

string Password = Pass.ExecuteScalar() as string;

Который установит пароль равным null, если по какой-либо причине результат не может быть передан в строку. Или:

string Password =(string)Pass.ExecuteScalar();

Разница в том, что "как строка" будет терпеть другой тип (например, целое число) и просто даст нуль в этом случае. В то время как "(строка)" генерирует исключение, если значение не является строковым или нулевым.


Это будет работать:

string Password =(string)Pass.ExecuteScalar().ToString();

licensed under cc by-sa 3.0 with attribution.