我有登录页面,我使用过存储过程。我正在使用session来存储作为主键的用户的id。当我输入错误的用户名和密码时,它应该重定向到其他一些页面,但是它给了我异常,因为"对象引用未设置为对象的实例。"我的login.aspx.cs代码是:
SqlCommand cmd1 = new SqlCommand("select artistId from artist where Username=@username and Artistpass=@password",con);
cmd1.Parameters.AddWithValue("@username", txtusr.Text);
cmd1.Parameters.AddWithValue("@password", txtpass.Text);
con.Close();
Session["username"] = txtusr.Text;
SqlParameter param = new SqlParameter("@username", txtusr.Text.Trim());
SqlParameter param1 = new SqlParameter("@password", txtpass.Text.Trim());
SqlCommand cmd = new SqlCommand("login", con);
cmd.Parameters.Add(param);
cmd.Parameters.Add(param1);
cmd.CommandType = CommandType.StoredProcedure;
con.Open();
SqlDataReader dr = cmd.ExecuteReader();
if (dr.Read())
{
Response.Redirect("afterlogin.aspx");
}
else
{
MessageBox.Show("Login Unsuccessful");
}
con.Close();
if (con.State != ConnectionState.Open)
{
con.Open();
}
int id = (int)cmd1.ExecuteScalar();
Session["ID"] = id;
con.Close();
帮助。
答案 0 :(得分:0)
ExecuteScalar返回null
因此,您无法将null返回值强制转换为整数
object id = cmd1.ExecuteScalar();
Session["ID"] = id;
con.Close();
这当然意味着您需要检查重定向页面中的Session [" ID"]变量,看它是否为空