这是我写的代码
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}}获取值?
答案 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