繁体   English   中英

C#MySQL更新布尔

[英]C# MySQL Update boolean

这是我的数据库类,我的目标是阻止用户(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;
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM