每当我尝试更新数据库时,结果都为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);
答案 0 :(得分:0)
您不需要围绕字符串参数的单引号。请改用此查询:
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);