У меня есть клиент/серверное приложение, и мой сервер хранит данные в базе данных MySQL, в настоящее время я установил соединение, и я делаю запросы без очереди или что-то в этом роде. Я не думаю, что это хорошее решение для этого, потому что, когда MySQLDataReader открывает другой, невозможно выполнить одно и то же время, а сначала нужно закрыть. Я думаю, у меня есть два варианта: либо подключайте каждый DataReader, либо ставьте мои запросы в очередь, чтобы выполнять их по одному.
Я хочу знать, какой из них лучший, или есть способ или что-то, чтобы предотвратить ошибки и исключение, которое вызывает эту ошибку
There is already an open DataReader associated with this Connection which must be closed first.
Вот как я сейчас делаю запросы. Сначала я получаю основное соединение и выполняю запросы. это мои причины выше ошибки.
string query = "SELECT * FROM users WHERE username = @username";
ServerModel.Database.CheckConnection(); // Get the main connection
MySqlCommand cmd = new MySqlCommand(query, ServerModel.Database);
cmd.Parameters.AddWithValue("@username", username);
UserStatus userStatus;
using (MySqlDataReader dataReader = cmd.ExecuteReader())
{
if (dataReader.Read())
{
...
dataReader.Close();
return userStatus;
}
}
Обратите внимание, что этот сервер может выполнять тысячи запросов в данный момент. подумайте о чат-сервере.
В этом случае, пожалуйста, не используйте блок использования, надеюсь, что подход ниже будет работать нормально.
string query = "SELECT * FROM users WHERE username = @username";
ServerModel.Database.CheckConnection(); // Get the main connection
MySqlCommand cmd = new MySqlCommand(query, ServerModel.Database);
cmd.Parameters.AddWithValue("@username", username);
UserStatus userStatus;
MySqlDataReader dataReader = cmd.ExecuteReader()
if (dataReader.Read())
{
...
dataReader.Close();
return userStatus;
}
MultipleActiveResultSets=True
в строку подключения, но это, безусловно, не было поддержано Mysql некоторое время назад (например, stackoverflow.com/questions/25953560/… ) Так что, если поддержка не была добавлена, так как выглядит как вы просто должны иметь несколько соединений или управлять очередью утверждений, как вы предлагаете ...