C# 如何使用登录作为密钥将标签中的文本设置为数据库中的名称?

C# 如何使用登录作为密钥将标签中的文本设置为数据库中的名称?,c#,asp.net,database,visual-studio-2012,sql-server-2012,C#,Asp.net,Database,Visual Studio 2012,Sql Server 2012,IDE:Microsoft Visual Studio 2012,DBMS:Microsoft SQL Server 2012 我有2个ASP.NET网页,一个登录页和主页。我想做的是在我登录之后,它会将ID保存到会话中,然后使用该ID从数据库(与ID相同的表)检索用户的名字,并将其保存到主页上的标签中。在过去,我可以通过以下方式完成: SqlDataReader 但现在我有了一个数据访问层类,它返回: DataTable 这是我的问题。我似乎不知道怎么做。到目前为止,我有以下几件作品: S

IDE:Microsoft Visual Studio 2012,DBMS:Microsoft SQL Server 2012

我有2个ASP.NET网页,一个登录页和主页。我想做的是在我登录之后,它会将ID保存到会话中,然后使用该ID从数据库(与ID相同的表)检索用户的名字,并将其保存到主页上的标签中。在过去,我可以通过以下方式完成:

SqlDataReader
但现在我有了一个数据访问层类,它返回:

DataTable
这是我的问题。我似乎不知道怎么做。到目前为止,我有以下几件作品:

Session.Add("StudentID", dt);
这是用于登录页面的。以下是主页:

DataTable dt = (DataTable)Session["StudentUser"];
int ID = int.Parse(Session["StudentID"].ToString());
DAL.GetData("SELECT Fname FROM StudentUser WHERE StudentID = " + ID);
lblName.Text = dt["Fname"].ToString();
int ID = int.Parse(Session["StudentID"].ToString());
SqlCommand com = new SqlCommand("SELECT Fname FROM StudentUser WHERE StudentID = " + ID, con);
SqlDataReader dr = com.ExecuteReader();
dr.Read();
lblName.Text = dr["Fname"].ToString();
dr.Close();
至于我的DAL代码,它们是:

public static DataTable GetData(string sql)
{
      SqlConnection con = new SqlConnection(DAL.ConnectionString);
      con.Open();
      SqlCommand com = new SqlCommand(sql, con);
      SqlDataAdapter da = new SqlDataAdapter(com);
      DataTable dt = new DataTable();
      da.Fill(dt);
      return dt;
}
我的表名为
StudentUser
,我希望标签上的部分是
Fname

使用
SqlDataReader
(dr)时,登录代码通常如下所示:

Session.Add("StudentID", dr["StudentID"].ToString());
主页:

DataTable dt = (DataTable)Session["StudentUser"];
int ID = int.Parse(Session["StudentID"].ToString());
DAL.GetData("SELECT Fname FROM StudentUser WHERE StudentID = " + ID);
lblName.Text = dt["Fname"].ToString();
int ID = int.Parse(Session["StudentID"].ToString());
SqlCommand com = new SqlCommand("SELECT Fname FROM StudentUser WHERE StudentID = " + ID, con);
SqlDataReader dr = com.ExecuteReader();
dr.Read();
lblName.Text = dr["Fname"].ToString();
dr.Close();

SqlDataReader
代码起作用,但我决心尽可能使用我的数据访问层,即使这会导致我使用我不熟悉的代码。请帮助亲爱的人们

问题是你不可能对所有的可能性都使用一种方法。例如,在您的示例中,您无法向dal发送参数,这意味着您必须在dal中为这样的事情创建一个方法

我有一门课或多或少地做你想做的事。它不是一个合适的存储库,但对于初学者来说,它可能有你需要的东西


您正在调用方法
DAL.GetData
,但您没有将
数据表保存到任何地方..,为什么不尝试以下操作:

DataTable dt1 = DAL.GetData("SELECT Fname FROM StudentUser WHERE StudentID = " + ID);
lblName.Text = dt1["Fname"].ToString();
而不是:

DAL.GetData("SELECT Fname FROM StudentUser WHERE StudentID = " + ID);
lblName.Text = dt["Fname"].ToString();

您需要存储从您创建的方法返回的值,如果不是,则调用该方法毫无意义

您的登录代码是什么样子?@DGibbs登录按钮代码:。。。DataTable dt=DAL.GetData(“从StudentUser中选择*,其中StudentID=“+txtID.Text”)。。。一些错误检查代码。。。if(txtPW.Text==dt.Rows[0][1].ToString());{Session.Add(“StudentID”,dt);Response.Redirect(“ApplyBlueform.aspx”);}这给了我一个错误:“无法对'System.Data.DataTable'类型的表达式应用带[]的索引。”您的建议非常有效。我在数据访问层上创建了一个新方法,该方法返回SqlDataReader值。将这个新创建的方法插入到网页代码中,然后进行一些编码,在那里,我现在的名字显示在标签中。谢谢大家的帮助,干杯