【问题标题】:Problem with MySQL @Id not defined at randomMySQL @Id 的问题不是随机定义的
【发布时间】:2021-09-20 17:48:52
【问题描述】:

我有一个奇怪的问题,随机发生。

这是执行 MySQL 数据库处理程序的样子:

public class DBContext
{
    List<MySqlParameter> _param = new List<MySqlParameter>();
    string _connectionString = Startup._Configuration["ConnectionStrings:DefaultConnection"];

    
    private void Execute(string strSQL, List<MySqlParameter> parameters)
    {

        using (MySqlConnection connection = new MySqlConnection(_connectionString))
        {
            connection.Open();
            using (MySqlCommand command = new MySqlCommand(strSQL, connection))
            {
                foreach (MySqlParameter param in parameters)
                    command.Parameters.AddWithValue(param.ParameterName, param.Value);

                command.ExecuteNonQuery();
            }
        }
    }}

这是我的 GetMyActiveRentals(这里是随机抛出异常的地方)。有时当我以 4-5 倍的速度运行该方法时,我会注意到这一点。

public Void GetMyActiveRentals(int rentalId)
    {
        var sql = $"SELECT r.*, b.boxNo, b.categoryId, c.name, c.brand FROM Rentals r " +
            $"INNER JOIN Box b LEFT JOIN Category c ON c.id=b.categoryId ON r.boxId=b.id " +
            $"WHERE r.id = @id";

        _param.Clear();
        _param.Add(new MySqlParameter("@id", rentalId));

        Execute(sql, _param);
    }

抛出异常:

MySql.Data.MySqlClient.MySqlException: Fatal error encountered during command execution.
Parameter '@id' must be defined.

【问题讨论】:

  • 什么是GetData?
  • 这看起来一点也不像 Java。也许是 C#?
  • 看来你在写 hql 查询。对吗?如果是 ypu 应该使用 : 而不是 @ 但正如 chrylis 所说,它不像 java 代码
  • 抱歉,我错误地标记了“Java”,它是 C# .NET。
  • @nbk,对不起,我粘贴了错误的方法...调用方法应该是“Execute()”。我现在已经更新了代码。

标签: c# mysql database


【解决方案1】:

你的代码基本上是正确的。

您的问题是_param,可以在执行另一个查询时清除。

GetMyActiveRentals 中的_param 和其他函数应该是一个本地 变量,在函数完成后会被销毁

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-21
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2012-10-04
    相关资源
    最近更新 更多