0

这是我写的代码

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()获得价值GetUserType

4

1 回答 1

1

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

Session["userid"] 与表无关。它只是名称/值对的列表。上面的“userid”是会话值“bob”的名称。

当您说“它无法读取”时,您是否遇到异常?还是 ExecuteReader 成功但不返回任何记录? 我注意到你d2.Read()在尝试之前没有打电话d2["UserTypeId"]

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

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

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

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

于 2012-11-15T03:29:17.613 回答