c# - 如何使用 SqlCommand 获取查询结果

标签 c# sqlconnection sqlcommand

我正在使用 SqlCommand 执行查询,但是这个查询通常非常慢 - 大约需要 50 秒才能完成 - 无论如何我可以读取结果,因为它们一一出现?

using (SqlConnection connection = new SqlConnection(ExportMetrics.CreateConnectionString()))
{
    SqlCommand command = new SqlCommand(sqlQuery, connection);
    connection.Open();
    SqlDataReader reader = command.ExecuteReader();

    try
    {
        while (reader.Read())
        {
                //Read results
        }
        catch (Exception e)
        {
            //Exception
        }
        finally
        {  
            reader.Close();
        }
    }
}

最佳答案

“逐一读取结果”是 SqlDataReader 已经执行的操作。

这是否有帮助取决于查询。使用 GROUP BY+聚合函数或 ORDER BY1 子句的查询通常必须在服务器内存中具体化整个结果集,然后才能开始返回结果。其他语言结构可能也需要这个。没有这些语言功能的查询可能能够更快地返回结果,具体取决于执行计划。

但是 50 秒在 SQL 世界中是一个漫长的时间。几乎总有一种方法可以重写查询或调整索引以使其运行速度更快。当然,除非我们能够看到查询、表结构和索引都作为问题的一部分列出,否则我们无能为力。


1 如果 ORDER BY 子句与主键或其他与 JOIN 相关的重要索引匹配,使得请求的顺序与查询工作集使用的顺序匹配,并且这可以通过数学方式显示,您可能还是可以的。

关于c# - 如何使用 SqlCommand 获取查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53398279/

相关文章:

c# - ASP.Net Identity 与 WebForms 到现有 SQL 数据库

c# - ISession 在 Azure 辅助角色中应该具有什么生活方式?

.net - 核心 .NET 运行时中的断点?

C# SQLCommand - 参数化查询被缩短

c# - 在 SQLCommand C# 中禁用 DML 查询

c# - MVC @Html.HiddenFor 渲染没有值的 html 表单

C# - System.Threading.Monitor 控制线程的优势

.net - SqlCommand.Dispose 是否关闭连接?

c# - 关闭连接时出现“Only assignment, call increment…”错误

c# - 遍历 DbCommand 中的参数