C#MySQL Update boolean

时间:2016-04-20 15:03:18

标签: c# visual-studio sql-update boolean

这是我的数据库类,我的目标是阻止用户(personeel)Cardnumber(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中执行whaetever。我试图在这里和那里改变一些东西,我想我错过了一些东西,或者没有使用正确的路径让这个做我想做的事。

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

任何帮助/建议都将不胜感激

1 个答案:

答案 0 :(得分:2)

不,您的查询不正确。如果该字段是布尔值,则不要使用字符串“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()方法似乎是麻烦的确定来源。如果你打开连接那么什么时候关闭它?在您的应用程序的生命周期内,不应保持连接打开。它消耗服务器和本地资源,并且它的状态会产生一系列逻辑问题,每次尝试使用它时都需要处理它们(更不用说如果你得到一些改变代码正常流程的异常会发生什么)