但是在我的数据库中,我添加了一个列名“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。
只需选择
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!");
}