[英]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.