#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
и другие функции должны быть локальной переменной, которая уничтожается после завершения функций