C # Использование нескольких соединений MySQL или поставить запросы в очередь для выполнения соответственно

0

У меня есть клиент/серверное приложение, и мой сервер хранит данные в базе данных 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;
        }
    }

Обратите внимание, что этот сервер может выполнять тысячи запросов в данный момент. подумайте о чат-сервере.

  • 0
    ТАК основы, всегда представляйте код с вопросом
  • 0
    В SQL Server вам нужно было бы поместить MultipleActiveResultSets=True в строку подключения, но это, безусловно, не было поддержано Mysql некоторое время назад (например, stackoverflow.com/questions/25953560/… ) Так что, если поддержка не была добавлена, так как выглядит как вы просто должны иметь несколько соединений или управлять очередью утверждений, как вы предлагаете ...
Показать ещё 4 комментария
Теги:
mysqlconnection

1 ответ

-2

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

    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;
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню