使用C# Windows窗体和SQL登录后在主窗体上显示用户信息

问题描述 投票:0回答:1

Login with Username & Password Showing Username in Home window Database Schema (I am not showing table value)

但是在我的数据库中,我添加了一个列名“Display_Name”并通过sql插入查询输入此列值。我可以在主页显示用户名。

代码:

        string Username = textBox1.Text;
        string Password = textBox2.Text;           

        SqlConnection connection = new SqlConnection("Data Source = 192.168.105.30; Initial Catalog = testDB; User ID = sa; Password = 123456");
        connection.Open();

        string sqlQuery = "SELECT COUNT(*) FROM Coke_User WHERE Username=@Username AND Password=@Password";
        SqlCommand sqlCommand = new SqlCommand(sqlQuery, connection);

        sqlCommand.Parameters.AddWithValue("@Username", Username);
        sqlCommand.Parameters.AddWithValue("@Password", Password);

        int count = (int)sqlCommand.ExecuteScalar();
        connection.Close();

        if (count > 0)
        {
            UserName.Name = "Hello " + @Username + ", Welcome to COKE.";

            Form1 form1 = new Form1();
            form1.Show();
            this.Hide();
        }
        else
        {
            MessageBox.Show("You have entered wrong credentials!");
        }
}

我想针对用户名显示 Display_Name。这意味着它将显示将使用该用户名登录的用户的 Display_Name。

c# sql-server authentication
1个回答
1
投票

只需选择

Display_Name
而不是
COUNT(*)
,然后检查
null
以确保用户确实存在。

您还有很多其他问题

  • 连接和命令(以及阅读器,如果您使用的话)需要用

    using
    进行处理。

  • 不要使用

    AddWithValue
    ,而是指定确切的参数类型和长度/精度。

  • 不要存储纯文本密码。相反,对它们进行加盐和哈希处理,并存储为字节数组。

  • 不要对连接字符串进行硬编码。请改用设置文件。

  • 请勿使用 IP 地址连接到 SQL Server,而应使用 DNS 名称。

  • 最好不要使用

    sa
    ,而是在 SQL Server 中创建一个更受限制的用户。

  • 考虑使用

    await connection.OpenAsync();
    await sqlCommand.ExecuteScalarAsync();
    以保持 UI 响应能力。

      string Username = textBox1.Text;
      string Password = textBox2.Text;           
    
      using SqlConnection connection = new SqlConnection(GetConnectionString());
      const string sqlQuery = @"
      SELECT Display_Name
      FROM Coke_User
      WHERE Username = @Username
        AND PasswordHash = @PasswordHash;
      ";
      using SqlCommand sqlCommand = new SqlCommand(sqlQuery, connection);
      sqlCommand.Parameters.Add("@Username", SqlDbtype.NVarChar, 100).Value = Username;
      sqlCommand.Parameters.Add("@PasswordHash", SqlDbType.VarBinary, 64).Value = SaltAndHash(Password, UserName);
    
      connection.Open();
      var displayName = sqlCommand.ExecuteScalar() as string;
      connection.Close();
    
      if (displayName != null)
      {
          UserName.Name = $"Hello {DisplayName}, Welcome to COKE.";
          Form1 form1 = new Form1();
          form1.Show();
          this.Hide();
      }
      else
      {
          MessageBox.Show("You have entered wrong credentials!");
      }
    
© www.soinside.com 2019 - 2024. All rights reserved.