如何在存储过程的会话中存储主键

时间:2014-05-06 14:18:06

标签: asp.net

我有登录页面,我使用过存储过程。我正在使用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();

帮助。

1 个答案:

答案 0 :(得分:0)

如果您的where语句找不到您的用户和密码匹配,则

ExecuteScalar返回null

因此,您无法将null返回值强制转换为整数

    object id = cmd1.ExecuteScalar();
    Session["ID"] = id;
    con.Close();

这当然意味着您需要检查重定向页面中的Session [" ID"]变量,看它是否为空