【问题标题】:Get values from data table and pass it to label从数据表中获取值并将其传递给标签
【发布时间】:2021-06-19 18:41:06
【问题描述】:

我想在用户成功登录后获取FullName,并将他们的FullName 放入label

string conn = ConfigurationManager.ConnectionStrings["SystemDatabase"].ConnectionString;
SqlConnection sqlconn = new SqlConnection(conn);
sqlconn.Open();
string query = "Select * from UserAccount where Username = '" + txtUsername.Text.Trim() + "' and Password = '" + txtPassword.Text.Trim() + "'";
SqlDataAdapter sda = new SqlDataAdapter(query,sqlconn);
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt.Rows.Count == 1) 
{
    FrmPOS frm = new FrmPOS();
    frm.Show();
    frm.lblCashierName.Text = ?//here i want to display the fullname from the UserAccount table.
    this.Hide();
}

我不知道如何从DataTable 获取数据。或者有没有其他方法可以做到?

【问题讨论】:

标签: c# sql-server winforms


【解决方案1】:

您可以使用 dt.Rows[0]["FullName"].ToString() 从第一条记录中获取 FullName 列。

using (SqlConnection sqlconn = new SqlConnection (conn))
{
    sqlconn.Open();
    string query = "SELECT * FROM UseAccount WHERE Username = @Username AND Password = @Password";
    using (SqlCommand cmd = new SqlCommand(query, sqlconn)
    {
        cmd.CommandType = CommandType.Text;
        cmd.Parameters.AddWithValue("@Username", txtUsername.Text.Trim());
        cmd.Parameters.AddWithValue("@Password", txtPassword.Text.Trim());
    
        using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
        {
            DataTable dt = new DataTable();
            adp.Fill(dt);
            if (dt != null || dt.Rows.Count > 0)
            {
                FrmPOS frm = new FrmPOS();
                frm.Show();
                frm.lblCashierName.Text = dt.Rows[0]["FullName"].ToString();
                this.Hide();
            }
        }
    }
}

无论如何,我想增强您的源代码以获得一些最佳实践

  1. 将 using 块应用于 SqlConnection、SqlCommand 和 SqlDataAdapter。这样当每个进程结束时,using块就会执行Dispose来释放资源。
  2. 应用带有参数的 SqlCommand(也称为参数化查询),因为您可以通过将值连接到命令中来导致 SQL Injection
  3. 检查 DataTable 以确保它有记录,然后才继续;旨在解决无数据返回时可能发生的NullReferenceException。

【讨论】:

    【解决方案2】:

    你可以试试这个

    string conn = ConfigurationManager.ConnectionStrings["SystemDatabase"].ConnectionString;
    SqlConnection sqlconn = new SqlConnection(conn);
    sqlconn.Open();
    string query = "Select * from UserAccount where Username = '" + txtUsername.Text.Trim() + "' and Password = '" + txtPassword.Text.Trim() + "'";
    SqlCommand command = new SqlCommand(query,sqlconn);
    SqlDataReader reader = command.ExecuteReader();
    
    if (reader.Read() == true) 
    {
        FrmPOS frm = new FrmPOS();
        frm.Show();
        frm.lblCashierName.Text = reader["FullName"].ToString();
        this.Hide();
    }
    

    【讨论】:

    • 不客气@SimSim,但我忘了更改SqlCommand的变量名,应该是command,哈哈:)
    • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入 - 查看Little Bobby Tables
    • 是的,我同意@marc_s 的建议
    • @marc_s 是的,先生,我会用它制作一个stored procedure
    猜你喜欢
    • 2016-09-08
    • 1970-01-01
    • 2018-03-22
    • 2021-10-01
    • 2021-02-10
    • 1970-01-01
    • 2016-08-28
    • 1970-01-01
    • 2021-03-22
    相关资源
    最近更新 更多