如何将从 "select" 查询中获得的值存储到 ASP.net 中的会话变量中

How do I store values obtained from the "select" query into the Session Variables in ASP.net

我是 ASP.net 的新手。我一直在从 Session[] 变量中获取值并存储到 Session 变量中,但是我无法存储在 ASP.net.

中运行 SELECT 查询后获得的值

示例:Select Fname, Mname , Lname from employee

运行此查询后,我想将 "Fname"、"Mname" 和 "Lname" 的值存储在 3 个单独的会话变量中,以便我可以从这些变量中检索所有其他页面变量。

这是我的代码,用于检查它是否是有效用户。我想要的是,一旦通过身份验证,它的所有数据都会从数据库中获取并存储在会话变量中,以便它们可以直接在所有页面上使用。

`protected void Button1_Click(object sender, EventArgs e) { SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["UserDetailsForGridViewConnectionString"].ConnectionString); conn.Open();

        string loginCheck = " select count(*) from USERDETAILS where EMPLOYEEID='" + TextBox1.Text + "' and PASSWORD='" + TextBox2.Text + "'";
        SqlCommand myloginCheckcmd = new SqlCommand(loginCheck, conn);
        int temp = Convert.ToInt32(myloginCheckcmd.ExecuteScalar().ToString());
        if (temp == 1)
        {
            LoginStatus.Text = "SUCCESS !!";
            temp = 0;
            Session["EMPLOYEEID_sn"] = TextBox1.Text;
            Session["IsLogin"] = "yesLogin";
            //TextBox1.Text = "";              
            Response.Redirect("~/CustomPages/Lecturer_PersonalDetailsPage.aspx");
            conn.Close();


        }
        else 
        {
            LoginStatus.Text = "Invalid Username/Password";
            temp = 0;
            TextBox1.Text = "";
            conn.Close();

        }


    }`

如果您使用 C# 开发,您可以使用:

DataSet ds = new DataSet();
ds = result of query;
Session["fname"] = ds.Tables[0].Rows[0]["FNAME"];
Session["mname"] = ds.Tables[0].Rows[0]["MNAME"];
Session["lname"] = ds.Tables[0].Rows[0]["LNAME"];

如果您在 vb 开发,您可以使用:

Dim ds As New DataSet()
ds = return of query
Session("fname") = ds.Tables(0).Rows(0)("FNAME")
Session("mname") = ds.Tables(0).Rows(0)("MNAME")
Session("lname") = ds.Tables(0).Rows(0)("LNAME")

注意:一定要确定查询的结果数,因为查询returns多于1个结果,变量session只存储第一个

您需要修改 select 语句以恢复您要查找的字段。我不熟悉你的数据库,但它应该是这样的:

Select Fname, Mname , Lname from employee inner join USERDETAILS on employee.employeeid = userdetails.employeeid

然后像这样使用 ExecuteReader 而不是 ExecuteScalar:

var rdr = myloginCheckcmd.ExecuteReader();
if(rdr.HasRows)
{
    while(rdr.Read())
    {
      Session("fname") = rdr[0];
      Session("mname") = rdr[1];
      Session("lname") = rdr[2];
    }
     LoginStatus.Text = "SUCCESS !!";
     Response.Redirect("~/CustomPages/Lecturer_PersonalDetailsPage.aspx");
        conn.Close();


}
else 
{
   LoginStatus.Text = "Invalid Username/Password";
   TextBox1.Text = "";
   conn.Close();
 }

您可以对此代码进行很多改进(考虑使用参数化查询),但这有望为您提供所需的内容。