Проблема с MySQL @Id не определена случайным образом

#c# #mysql #database

Вопрос:

У меня странная проблема, которая возникает случайным образом.

Вот как выглядит обработчик базы данных 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();
            }
        }
    }}
 

Это мой Getmyactivertals (здесь исключения выбрасываются случайным образом). Иногда я замечаю это, когда быстро запускаю метод 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);
    }
 

Исключение thorwn:

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

Комментарии:

1. что такое getData?

2. Это совсем не похоже на Java. Может быть, это C#?

3. похоже, вы пишете hql query.am я прав? если это ypu, следует использовать : вместо@, но, как сказала Крилис, это не похоже на java-код

4. Извините, я по ошибке пометил «Java», это C# .NET.

5. @nbk, извините, я вставил неправильный метод… вызывающий метод должен быть «Execute()». Теперь я обновил код.

Ответ №1:

Ваш код в основном звучит здраво.

Ваша проблема заключается в _param, который может быть удален при выполнении другого запроса.

_param in GetMyActiveRentals и другие функции должны быть локальной переменной, которая уничтожается после завершения функций