gpt4 book ai didi

c# - 如何显示 "current user"的数据?

转载 作者:行者123 更新时间:2023-11-30 15:14:08 24 4
gpt4 key购买 nike

我是一名高中生,但仍是 C# 的初学者。

我正在为用户制作一个图书馆管理系统(用于书籍),其中包括一个数据库(visual studio 中的 sql 本地数据库(?))。我有一个表格,用户可以在其中查看他们在注册表中输入的数据(用户 ID、姓名、用户名、类(class)、部分)。唯一的问题是它只显示创建的第一个帐户的数据。无论我创建了多少其他帐户,它仍然只显示第一个。我如何才能让它显示“当前”用户/登录帐户的数据?

我尝试通过更改

稍微更改代码
SqlCommand cmd = conn.CreateCommand();
cmd.CommandType = CommandType.Text;
cmd.CommandText = "Select * from [tbl_accounts]";

进入

string select = "Select * from [tbl_accounts]";
SqlCommand cmd = new SqlCommand(select, conn);

不过,我认为它们基本上是一样的。我真的不知道该怎么做,因为我发现的其他解决方案要复杂得多。

这是我现在使用的代码:

try
{
SqlConnection conn = new SqlConnection(@"[connection string]");
conn.Open();

string select = "Select * from [tbl_accounts]";
SqlCommand cmd = new SqlCommand(select, conn);
SqlDataReader dr = cmd.ExecuteReader();

if(dr.Read())
{
materialLabel6.Text = dr["accountID"].ToString();
materialLabel7.Text = dr["username"].ToString();
materialLabel8.Text = dr["name"].ToString();
materialLabel9.Text = dr["strand"].ToString();
materialLabel10.Text = dr["section"].ToString();
}

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);}
}

我希望看到的结果例如是:

用户(表):

  1. 人物A
  2. B

当前登录:PersonB

[人员数据]

所以这意味着表单将只显示 PersonB 的数据而不是 PersonA 的数据

最佳答案

对于初学者来说,如果您需要不止一行的数据,您会想要遍历数据读取器中的所有行。现在您只返回第一行。 This link应该有相关的信息。但是,理想情况下,您希望从 UI(或您用来触发函数调用的任何参数)发送一个参数,该参数表示用户(ID 或 Users 表中的任何唯一字段)并将其发送到 sql 查询的 where 子句,以便您只提取所需的记录。

查询应该类似于:

public void GetUserInfo(int userId) // though you might want to change the parameter to suit your needs. It's hard to tell without being able to see the schema
{
string select = string.Format("Select * from [tbl_accounts] where Id = {0}", userId.ToString()); // something along these lines
SqlCommand cmd = new SqlCommand(select, conn);

SqlDataReader dr = cmd.ExecuteReader();

if(dr.Read())
{
materialLabel6.Text = dr["accountID"].ToString();
materialLabel7.Text = dr["username"].ToString();
materialLabel8.Text = dr["name"].ToString();
materialLabel9.Text = dr["strand"].ToString();
materialLabel10.Text = dr["section"].ToString();
}
}

编辑:快速说明,如果您调整查询以便它根据参数提取一条记录,则您不需要进行循环。

另一个快速编辑:我分解了代码以使其更具可读性。这更像是一个“理想的实现”,并且对代码实现了一些更好的实践。 (我知道这是一个高中项目,但最好习惯分解代码,这样它在 imo 的早期就更通用。这主要是为了可维护性。在较大的项目中,将所有内容紧密耦合在一起很难管理。)

public User GetUserInfo(int userId) // though you might want to change the parameter to suit your needs. It's hard to tell without being able to see the schema for the user table
{

SqlConnection conn = new SqlConnection(@"[connection string]");
conn.Open();

string select = string.Format("Select * from [tbl_accounts] where Id = {0}", userId.ToString()); // something along these lines
SqlCommand cmd = new SqlCommand(select, conn);

SqlDataReader dr = cmd.ExecuteReader();

User user = new User();

if(dr.Read())
{
user.AccountId = dr["accountID"].ToString();
user.UserName = dr["username"].ToString();
user.Name = dr["name"].ToString();
user.Strand = dr["strand"].ToString();
user.Section = dr["section"].ToString();
}
return user;
}

public void SetValues(User user)
{
materialLabel6.Text = user.AccountId;
materialLabel7.Text = user.UserName;
materialLabel8.Text = user.Name;
materialLabel9.Text = user.Strand;
materialLabel10.Text = user.Section;
}


public class User
{
string AccountId { get; set; }
string UserName { get; set; }
string Name { get; set; }
string Strand { get; set; }
string Section { get; set; }
}

关于c# - 如何显示 "current user"的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56025146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com