Maison  >  Questions et réponses  >  le corps du texte

Comment demander à MySQL d'inspecter et de valider les résultats statiques d'une autre colonne

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粉111627787P粉111627787276 Il y a quelques jours365

répondre à tous(2)je répondrai

  • P粉459440991

    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() 或使用 DataAdapterFill() 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.

    répondre
    0
  • P粉533898694

    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数据适配器.

    répondre
    0
  • Annulerrépondre