这是我的数据库类,我的目标是阻止用户(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;
}
任何帮助/建议都将不胜感激
答案 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()
方法似乎是麻烦的确定来源。如果你打开连接那么什么时候关闭它?在您的应用程序的生命周期内,不应保持连接打开。它消耗服务器和本地资源,并且它的状态会产生一系列逻辑问题,每次尝试使用它时都需要处理它们(更不用说如果你得到一些改变代码正常流程的异常会发生什么)