Трудно сказать наверняка, поскольку вы не опубликовали точное исключение, которое оно выдает, но я подозреваю, что проблема в том, что вы вызываете ExecuteReader
для команды, которая уже используется. Как сказано в документации :
Пока MySqlDataReader используется, связанный MySqlConnection занят обслуживанием MySqlDataReader. В этом состоянии никакие другие операции с MySqlConnection не могут быть выполнены, кроме как его закрытие. Это происходит до тех пор, пока не будет вызван метод MySqlDataReader.Close для MySqlDataReader.
Вы звоните cmd.ExecuteReader()
, чтобы проверить, есть ли строки, а затем вы снова вызываете ExecuteReader()
, чтобы получить данные из строк. Мало того, что это не работает, потому что это нарушает условия, изложенные выше, это было бы ужасно неэффективно, если бы это действительно работало, потому что это потребовало бы двух поездок в базу данных.
Следуя примеру, показанному в документе, который я связал, я бы сказал, что вы хотите что-то вроде:
public object FetchColumn(string query)
{
MySqlCommand cmd = new MySqlCommand(query, this.connection);
MySqlDataReader reader = cmd.ExecuteReader();
try
{
bool gotValue = false;
while (reader.Read())
{
// do whatever you're doing to return a value
gotValue = true;
}
if (gotValue)
{
// here, return whatever value you computed
}
else
{
return false;
}
}
finally
{
reader.Close();
}
}
Я не уверен, что вы пытаетесь вычислить с помощью HasRows
, счетчика и т. Д., Но это должно указать вам правильное направление.