如何将从“选择”查询中获得的值存储到 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中的另一个查询?