suchen

Heim  >  Fragen und Antworten  >  Hauptteil

So überprüfen und validieren Sie die statischen Ergebnisse einer anderen Spalte durch MySQL

Dies ist der Code, den ich gerade ausführe:

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");
        }
    }

Der obige Code kann sich bei meiner Datenbank anmelden. Das Problem ist, dass nur Login und Passwort überprüft werden. Da diese beiden funktionieren, weiß ich nicht, wie ich eine weitere Spalte mgroup_others aufrufen und prüfen soll, ob dort ein Ergebnis von 7 steht. Ich habe hier ein Foto meiner Datenbank angehängt:

Dies ist die Funktion, die ich umgeschrieben habe:

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粉111627787385 Tage vor417

Antworte allen(2)Ich werde antworten

  • P粉459440991

    P粉4594409912024-01-17 16:57:14

    SELECT 子句应如下所示:

    SELECT members_pass_hash, mgroup_others

    然后,由于您获得了多个值,因此您应该使用 ExecuteReader() 或使用 DataAdapterFill() DataTable,因此您可以使用所有值。如果您想成为一名成功的开发人员,那么您应该自己编写这些代码,以便您理解它,而不是仅仅复制我们为您提供的代码。

    Antwort
    0
  • P粉533898694

    P粉5338986942024-01-17 13:58:09

    如果您需要知道的是 mgroup_others 列中的值是否等于 7,您可以按如下方式更新 SQL:

    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();

    这种方法的优点(与其他一些答案相比)是您仍然可以使用 ExecuteScalar ,因为您只读取单个值。

    如果您需要检索 mgroup_others 的值并在 C# 代码中检查它,您应该使用显示如何使用 ExecuteReader数据适配器

    Antwort
    0
  • StornierenAntwort