C# 使用数据库中的用户名获取配置文件id

C# 使用数据库中的用户名获取配置文件id,c#,asp.net,C#,Asp.net,我必须捕获在登录页面中输入的用户名,并获取相应的profileid(DB中的列),然后在另一个页面中显示我的DAL代码 public DataTable getall() { SqlConnection conn1 = Generic.DBConnection.OpenConnection(); DataTable dt=new DataTable(); try { string sql = "Select

我必须捕获在登录页面中输入的用户名,并获取相应的profileid(DB中的列),然后在另一个页面中显示我的DAL代码

public DataTable getall()
   {
       SqlConnection conn1 = Generic.DBConnection.OpenConnection();
       DataTable dt=new DataTable();
       try
       {
             string sql = "Select * from Profile_Master";
             SqlCommand cmds = new SqlCommand(sql,conn1);
             SqlDataAdapter sqlDa = new SqlDataAdapter(cmds);
           sqlDa.Fill(dt);


       }
       catch (Exception ex)
       {

           throw ex;
       }
       return dt;
   }
我的用户界面


但是我能够得到数据库中的第一个值,而不是用户名的对应值?

您的select语句有10行。您所需的行位于第5位。 当您说dt1.Rows[0][“FirstName”]时,您将只得到第一条记录,而不是第五条记录

如果您想实现这一点,请将where条件添加到select语句中,该语句只返回一个所需的行

类似于

“从配置文件中选择*主PM,其中PM.UserName=@UserName”


其中@username是登录页面的输入。并且在数据库表中是唯一的

我怀疑查询中缺少
WHERE
子句导致您只能获取第一行。尝试在SQLCommands中放入类似于
的内容,其中Profile\u Master\u Username=Username
,但我不会在getall()中发送用户名。如果我想根据Username获取更多值,该怎么办?您需要将相关数据传递到查询,否则如何过滤它?我建议使用一个简单的字符串参数。至于额外的数据,没有理由不使用一个真正复杂的查询来返回来自不同表的各种数据。或者,尝试使用实体框架之类的工具作为DAL。
DataTable dt1 = new DataTable();
                ProfileMasterDAL dal = new ProfileMasterDAL();
                dt1 = dal.getall();
                if (dt1.Rows.Count > 0)
                {
                    Session["sdds"] = dt1.Rows[0]["FirstName"].ToString();
                    Session["EmailId"] = dt1.Rows[0]["EmailID"].ToString();
                    Session["pid"] = dt1.Rows[0]["NewidColumn"].ToString();
                    Response.Redirect("~/Myhome.aspx");