每当我尝试更新数据库时,结果都是 0。
如果我在 HeidiSQL 中执行此操作,它会很好地更新,所以我知道这不是查询。
我怀疑这与参数有关,但我对此不确定。
我尝试了 @ 和 ?,但都不起作用。
MySqlCommand Command = new MySqlCommand("UPDATE `users` SET `cash`=@Cash,
`distance_driven`=@DistanceDriven, `jobs_done`=@JobsDone,
`job_rank`=@JobRank WHERE `username`='@Username';"
, Connection);
Command.Parameters.AddWithValue("@Cash", Cash);
Command.Parameters.AddWithValue("@DistanceDriven", DistanceDriven);
Command.Parameters.AddWithValue("@JobsDone", JobsDone);
Command.Parameters.AddWithValue("@JobRank", JobRank);
Command.Parameters.AddWithValue("@Username", UName);
int result = Command.ExecuteNonQuery(); // result should be 1
Console.WriteLine(result); // ends up being 0
连接打开正常,但我不知道为什么它不会使用参数执行查询。
以下是需要此更新的功能:
public void UpdateUserInfo(object sender, ElapsedEventArgs evt, string uUName)
{
bool cont = false;
Console.WriteLine("UUI 1: " + evt.SignalTime); // gets here fine
try
{
Console.WriteLine("UUI 2: " + evt.SignalTime); // gets here fine
Database database = new Database();
database.Connect();
if (database.UpdateUserData(uUName, TotalCashWallet, TotalDistanceDriven, JobsDone, JobRank))
{
cont = true;
Console.WriteLine("UUI 3: " + evt.SignalTime); // doesn't get here
}
if (cont == true)
{
cont = false;
Console.WriteLine("UUI 4: " + evt.SignalTime);
if (database.UpdateUserBank(uUName, BankInfo.Money, BankInfo.BonusPercentage, BankInfo.BonusLevel))
{
UserInfoUpdated = true;
Console.WriteLine("UUI 5: " + evt.SignalTime);
UserInfoUpdatedTimer.Enabled = true;
return;
}
}
UserInfoUpdated = false;
return;
}
catch (Exception e)
{
Console.WriteLine("UUI 6: " + evt.SignalTime);
Console.WriteLine(e.Message);
ErrorHandler.WriteToLog(e.StackTrace);
ErrorHandler.WriteToLog(e.Message);
ErrorHandler.WriteToLog("------------------------------");
}
return;
}
它没有到达 catch 部分,因此不会记录任何内容。 我尝试了 Exception 和 MysqlException,但它没有捕获错误。
以不安全的方式进行操作
MySqlCommand Command = new MySqlCommand("
UPDATE `users`
SET `cash`=" + Cash + ",
`distance_driven`=" + DistanceDriven + ",
`jobs_done`=" + JobsDone + ",
`job_rank`=" + JobRank + "
WHERE `username`='" + UName + "';"
, Connection);
最佳答案
您不需要在字符串参数周围使用单引号。请改用此查询:
string query = @"
UPDATE `users` SET
`cash`=@Cash,
`distance_driven`=@DistanceDriven,
`jobs_done`=@JobsDone,
`job_rank`=@JobRank
WHERE
`username`=@Username"
MySqlCommand command = new MySqlCommand(query, Connection);
关于C# MySQL 参数化更新不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32905870/