C#MySQL更新布尔值

本文关键字:布尔值 更新 C#MySQL | 更新日期: 2024-10-18 14:41:02

这是我的数据库类,我的目标是阻止用户(personeel)卡号(pasnummer)我相信我的Sql查询是正确的。

 public Personeel BlockPersoneel(bool iGeblokkeerd)
    {
        OpenDeConnectie();
        MySqlCommand cmd = new MySqlCommand("UPDATE `personeel` SET `Geblokkeerd` = '1' WHERE `Pasnummer` = @pasnummer", DatabaseConnectie);
        cmd.Parameters.AddWithValue("@pasnummer", iGeblokkeerd);
        MySqlDataReader reader;
        reader = cmd.ExecuteReader();
        reader.Read();
        Personeel personeel = new Personeel();
        personeel.Geblokkeerd = reader.GetBoolean("Geblokkeerd");
        return personeel;
    }

这是我的主要形式(ParkeerSysteem),我的目标是确保btBlokkeren_click将执行BlockPersoneel中的所有内容。我试着在这里和那里改变了一些事情,我认为我错过了一些东西,或者没有使用正确的路径来让这个做我想做的事情。

        private void btBlokkeren_Click(object sender, EventArgs e)
    {
        // im having a hard time figuring out how to execute my db.BlockPersoneel database class method
        // I have tried a few lines of codes with no results
        Personeel personeel = db.BlockPersoneel(personeel.Geblokkeerd());
        // I have tried this aswell with no result
        Personeel personeel = new Personeel();
        personeel.Geblokkeerd = true;
    }

如有任何帮助/建议,我们将不胜感激。

C#MySQL更新布尔值

不,您的查询不正确。如果字段是布尔值,则不要使用字符串"1"设置它,而是直接使用数值1或0。

之后,在UPDATE查询中使用MySqlDataReader是没有意义的,因为UPDATE不会返回更改的行。您需要一个SELECT。

public Personeel BlockPersoneel(bool iGeblokkeerd)
{
    OpenDeConnectie();
    MySqlCommand cmd = new MySqlCommand("UPDATE `personeel` SET `Geblokkeerd` = 1 WHERE `Pasnummer` = @pasnummer", DatabaseConnectie);
    cmd.Parameters.AddWithValue("@pasnummer", iGeblokkeerd);
    cmd.ExecuteNonQuery();
    // Use the same command but change the commandtext to retrieve the record
    cmd.CommandText = "SELECT `Geblokkeerd` FROM `personeel` WHERE `Pasnummer` = @pasnummer";
    // Use ExecuteScalar because we need only the value 
    // from the first column of the first row
    bool blocked = Convert.ToBoolean(cmd.ExecuteScalar());
    personeel.Geblokkeerd = blocked;
    return personeel;
}

但是,由于对ExecuteNonQuery的调用返回受命令影响的行数,因此如果ExecuteNonQuery的返回大于零,则可以确保您的行已经更新

public Personeel BlockPersoneel(bool iGeblokkeerd)
{
    OpenDeConnectie();
    MySqlCommand cmd = new MySqlCommand("UPDATE `personeel` SET `Geblokkeerd` = 1 WHERE `Pasnummer` = @pasnummer", DatabaseConnectie);
    cmd.Parameters.AddWithValue("@pasnummer", iGeblokkeerd);
    int rows = cmd.ExecuteNonQuery();
    personeel.Geblokkeerd = (rows > 0);
    return personeel;
}

与您的实际问题无关,但OpenDeConnectie()方法似乎确实是问题的根源。如果你打开那里的连接,你什么时候关闭?在应用程序的生命周期内,连接不应保持打开状态。它消耗服务器和本地资源,其状态会产生一系列逻辑问题,每次尝试使用它时都需要处理这些问题(更不用说如果遇到一些异常,会改变代码的正常流,会发生什么)