如何从一种方法获取会话的值?

时间:2012-11-15 03:09:35

标签: c# asp.net sql sql-server

这是我写的代码

private void ViewUsers()
{
    con.Open();
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText =
        "SELECT FirstName + ' ' + LastName AS Name FROM Clients WHERE UserID=" + Session["userid"];

    SqlDataReader data = com.ExecuteReader();

    while (data.Read())
    {
        lblName.Text = data["Name"].ToString();
    }
    data.Close();
    con.Close();
}

private void GetUserType()
{
    con.Open();
    SqlCommand com = new SqlCommand();
    com.Connection = con;
    com.CommandText =
        "SELECT UserTypeID FROM Users WHERE UserID=" + Session["userid"];

    SqlDataReader d2 = com.ExecuteReader();
    if (d2["UserTypeID"].ToString() != "4")
    {
        Response.Redirect("ContactUS.aspx");
    }
}

如何从Session["userid"]ViewUsers()的{​​{1}}获取值?

1 个答案:

答案 0 :(得分:1)

关于您的评论,Session与表格无关。当用户访问您的网站并设置Session["userid"] = "bob",然后稍后从其他位置Session["userid"]访问该网站时,它将始终提供值" bob"。因此,在两种方法中访问Session["userid"]的代码都应该在两种情况下都为您提供值。

会话[" userid"]与表格无关。它只是一个名称/值对列表。以上" userid"是会话值的名称" bob"。

当你说"它无法读取",你得到例外吗?或者ExecuteReader成功但没有返回记录? 我注意到您在尝试d2.Read()

之前未致电d2["UserTypeId"]

通常你也会在调用.Read之前检查d2.HasRows,因为如果没有行你就不想尝试检索数据。

在方法中设置断点时,使用调试器查看Session["userid"]在监视窗口中生成的值。突出显示,右键单击,添加手表。这将帮助您确定是否存在问题。

您也可以添加d2.HasRows进行观看,然后在步骤过去 ExecuteReader后,您可以看到它的值是什么。如果它没有产生任何结果,那么表格中可能没有该用户的行。

由于看起来您只需要单个行的单个值,因此ExecuteScalar可能更适合: https://stackoverflow.com/a/5794595/84206