0

我有一个客户端/服务器应用程序,我的服务器将数据存储在一个MySQL database,目前我已经建立了连接,并且我在没有队列或其他东西的情况下进行查询。我认为这不是一个好的解决方案,因为当一个MySQLDataReader打开时,另一个不能同时执行,第一个必须关闭。我想我有两个选择,要么按每个连接,要么DataReader将我的查询放入队列中逐个执行。

我想知道哪个是最好的,或者有什么方法或东西可以防止导致此错误的错误和异常

已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭它。

这就是我目前进行查询的方式。我首先获得主连接并进行查询。这是我导致上述错误的原因。

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

请注意,该服务器可能同时执行数千个查询。考虑一个聊天服务器。

4

1 回答 1

-1

在这种情况下,请不要使用using块,我希望下面的方法可以正常工作。

    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;
        }
于 2018-04-06T07:44:57.480 回答