Maison > Questions et réponses > le corps du texte
Voici le code que j'utilise actuellement :
private void button1_Click(object sender, EventArgs e) { string server = "207.244.70.217"; string database = "nextgene_NGH"; string uid = "EXAMPLEUID"; string password = "EXAMPLEPASSWORD"; string ssl = "None"; string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};"; using var connection = new MySqlConnection(connectionString); connection.Open(); using var command = new MySqlCommand("SELECT members_pass_hash FROM core_members && WHERE name = @name;", connection); command.Parameters.AddWithValue("@name", maskedTextBox1.Text); var hashedPassword = (string) command.ExecuteScalar(); if (!(hashedPassword is null && !BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text, hashedPassword))) { MessageBox.Show("Login Successful"); } }
Le code ci-dessus peut se connecter à ma base de données. Le problème est qu'il vérifie uniquement l'identifiant et le mot de passe. Puisque ces deux fonctionnent, je ne sais pas comment appeler une autre colonne mgroup_others et vérifier s'il y a un résultat de 7 là-bas. J'ai joint une photo de ma base de données ici :
Voici la fonction que j'ai réécrite :
private void button1_Click(object sender, EventArgs e) { string server = "207.244.70.217"; string database = "nextgene_NGH"; string uid = "EXAMPLEUID"; string password = "EXAMPLEPASSWORD"; string ssl = "None"; string vipcheck = "7"; string connectionString = $"SERVER={server};DATABASE={database};UID={uid};PASSWORD={password};SSL Mode={ssl};"; using var connection = new MySqlConnection(connectionString); connection.Open(); using var command = new MySqlCommand("SELECT members_pass_hash AND mgroup_others FROM core_members && WHERE name = @name;", connection); command.Parameters.AddWithValue("@name", maskedTextBox1.Text); var hashedPassword = (string) command.ExecuteScalar(); if (!(hashedPassword is null && !BCrypt.Net.BCrypt.Verify(maskedTextBox2.Text && vipcheck != mgroup_others, hashedPassword))) { MessageBox.Show("Login Successful"); } }
P粉4594409912024-01-17 16:57:14
La clause
SELECT
devrait ressembler à ceci :
SELECT members_pass_hash, mgroup_others
Ensuite, puisque vous obtenez plusieurs valeurs, vous devez utiliser ExecuteReader()
或使用 DataAdapter
来 Fill()
DataTable
afin de pouvoir utiliser toutes les valeurs. Si vous voulez devenir un développeur performant, vous devez écrire ce code vous-même afin de le comprendre, plutôt que de simplement copier le code que nous vous fournissons.
P粉5338986942024-01-17 13:58:09
Si tout ce que vous devez savoir est mgroup_others
列中的值是否等于 7
, vous pouvez mettre à jour le SQL comme suit :
using var command = new MySqlCommand(""" SELECT members_pass_hash FROM core_members WHERE name = @name AND mgroup_others = 7; """, connection); command.Parameters.AddWithValue("@name", maskedTextBox1.Text); var hashedPassword = (string) command.ExecuteScalar();
L'avantage de cette approche (par rapport à certaines autres réponses) est que vous pouvez toujours utiliser ExecuteScalar puisque vous ne lisez qu'une seule valeur.
Si vous avez besoin de récupérer mgroup_others
的值并在 C# 代码中检查它,您应该使用显示如何使用 ExecuteReader
或数据适配器
.