如何将从“选择”查询中获得的值存储到 ASP.net 中的会话变量中

Posted

技术标签:

【中文标题】如何将从“选择”查询中获得的值存储到 ASP.net 中的会话变量中【英文标题】:How do I store values obtained from the "select" query into the Session Variables in ASP.net 【发布时间】:2015-01-08 16:57:42 【问题描述】:

我是 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();

        


    `

【问题讨论】:

您需要出示您的代码,以便我们为您提供帮助。 因为你刚刚开始,我建议你为值创建一个类,为每个值创建一个属性,然后用值填充类,并将类存储在会话中。它现在需要更多的学习,但会真正帮助你长期。 谢谢。是的,我刚刚开始在 ASP.net C# 上进行开发。我一直以这种方式赋值 Session["EMPLOYEEID_sn"] = TextBox1.Text;但想知道如何将结果值存储在 Session 中 @NikhilParmar 看起来您已经知道如何在会话中存储内容,但您真正要问的是如何从数据库中检索数据?如果我错了,请纠正我。 @MattyM 我知道如何仅从文本框存储在 Session 中。我知道如何编写 SQL 查询,但我不知道如何在会话中存储从运行 sql 查询获得的值。我有一个将 Eid、FNAME、MNAME、LNAME 和许多详细信息存储到数据库中的表单。我想要的是,当我使用正确的凭据登录时,我想获取特定 Eid 的所有数据并在几个页面上显示 Eid、Fname、Mname、Lname。所以我想将获得的值存储在会话中,这样我就可以直接在所有页面上使用它,而不是从数据库中获取它。 【参考方案1】:

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

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();
 

您可以对这段代码进行很多改进(考虑使用参数化查询),但希望这能满足您的需求。

【讨论】:

【参考方案2】:

如果你用 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")

注意:你必须确定查询结果的数量,因为查询返回的结果不止1个,变量session只存储第一个

【讨论】:

谢谢。对不起我的愚蠢问题。但是我必须在你提到的 DataSet 代码中在哪里编写我的选择查询?我是否必须将查询写为 DataSet ds=new DataSet; ds=从员工中选择 fname、mname、lname;然后剩下的?

以上是关于如何将从“选择”查询中获得的值存储到 ASP.net 中的会话变量中的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?

如何将从地理位置获得的城市与我的数据库中存储的城市进行比较,如果城市存在,则通过 ajax 请求传递 id?

如何查询并确保返回的值只添加到数组中一次?

Laravel 4:将从存储库获得的验证消息传递给控制器

如何将从服务器获得的响应发送到电子邮件?

将从 Hibernate Native Query 返回的值映射到模型