C# MySQL 参数化更新不返回任何内容

标签 c# mysql parameters

每当我尝试更新数据库时,结果都是 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/

相关文章:

c# - Telerik Radcombobox autopostback 根本不触发

sql-server - 从 SQL 转储中删除 `information_schema`

performance - 忽略 T-SQL 中的 NULL 参数

javascript - Angular URL 参数在 Chrome 中被删除

mysql - 您可以在创建现有的 mysql 触发器后对其进行修改吗?

apache-spark - PySpark 中的 CrossValidator 是否分发执行?

c# - ASP.NET MVC 4 DropDownList SelectedValue 不起作用

c# - 锁定属性

c# - Windows Mobile 应用程序意外退出

PHP 和 MYSQL 从数据库向特定人员发送电子邮件