You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#俄罗斯方块游戏Top5玩家排名查询报错及格式需求求助

解决C#中DataReader未关闭错误并实现俄罗斯方块Top5排名

错误原因

出现There is already an open DataReader associated with this Command which must be closed first.错误的核心原因是:同一个数据库连接上存在未关闭的DataReader时,又尝试执行新的查询,大多是因为没有正确释放DataReader或连接资源导致的。

解决方案与代码实现

1. 最佳实践:使用using语句自动管理资源

using语句会在代码块结束时自动调用对象的Dispose()方法,确保DataReader、Command和Connection被正确关闭释放,从根源避免错误。

以下是完整的实现代码,包含查询Top5分数、格式化输出指定排名格式:

using System;
using System.Data.SqlClient;

class ScoreRank
{
    static void Main()
    {
        // 替换为你的数据库连接字符串
        string connectionString = "Server=你的服务器;Database=你的数据库;User Id=用户名;Password=密码;";

        // 使用using包裹连接、命令、DataReader,自动释放资源
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();

            // 查询Score表中分数最高的前5条记录,关联Users表确保用户有效
            string query = @"SELECT TOP 5 s.userName, s.score 
                            FROM Score s 
                            INNER JOIN Users u ON s.userName = u.userName 
                            ORDER BY s.score DESC";

            using (SqlCommand cmd = new SqlCommand(query, conn))
            {
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        string userName = reader["userName"].ToString();
                        int score = Convert.ToInt32(reader["score"]);
                        // 格式化输出,对齐用户名和分数
                        Console.WriteLine($"{userName.PadRight(10)}{score} points");
                    }
                }
            }
        }
    }
}

2. 备选方案:开启MARS(多活动结果集)

如果业务场景需要在同一个连接上同时打开多个DataReader,可以在连接字符串中添加MultipleActiveResultSets=True,示例:

Server=你的服务器;Database=你的数据库;User Id=用户名;Password=密码;MultipleActiveResultSets=True;

但这种方式仅适用于特殊场景,优先推荐使用using语句管理资源,代码更简洁安全。

输出格式说明

上述代码通过PadRight(10)让用户名部分固定宽度,确保分数对齐,输出效果与你期望的一致:

user 1    99 points
user 2    21 points
user 3    21 points
user 2    12 points
user 3    4 points

内容的提问来源于stack exchange,提问作者F A Fernández

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 21:20:37