繁体   English   中英

如何对 SQL Server 运行多个查询?

[英]How to run multiple queries against SQL Server?

我已经阅读并实现了几个不同版本的 Microsoft 建议的查询 SQL Server 数据库的方法。 在我读过的所有内容中,每个查询都被 using 语句包围,例如在某些方法DoQuery

List<List<string>> DoQuery(string cStr, string query)  
{
    using(SqlConnection c = new SqlConnection(cStr)) 
    {
        c.Open();

        using(SqlCommand cmd = new SqlCommand(queryStr, c)) 
        {
            using(SqlDataReader reader = cmd.ExecuteReader()) 
            {
                while (reader.Read() ) 
                {
                     ...
                     //read columns and put into list to return
                }

           // close all of the using blocks
           }
        }
    }

    // return the list of rows containing the list of column values.
}

我需要针对同一数据库的不同查询字符串运行此代码数百次。 似乎每次创建一个新连接效率低下,每次丢弃它都是浪费。

我应该如何构建它以使其有效? 当我尝试不使用 using 块并将连接传递到DoQuery方法时,我收到有关连接尚未关闭的消息。 如果我在查询后关闭它,那么我会收到有关它未打开的消息。

我也在努力改进这一点,因为我总是变得有些随机

IOException: 无法从传输连接读取数据:非阻塞套接字上的操作将阻塞。

目前我是数据库的唯一用户,我没有在多线程或异步等中做任何事情。只是循环查询字符串并在它们上运行DoQuery

我的结构是否可能是该问题的一部分,即没有足够快地释放资源,从而导致连接被阻塞?

我被困在效率和这个阻塞问题上。 提前致谢。

事实证明,查询结构很好,查询也很好。 问题是我在每个查询上都有一个“按 X 描述排序”,并且该列没有编入索引。 这会导致全表扫描对行进行排序,即使只返回 2。该表有大约 300 万行,我认为它可以比它更好地处理。 它超时了 360 秒连接超时! 我为该列建立了索引,不再有“阻塞”废话,顺便说一句,当它实际上是超时时,这是一条可怕的消息。 如果我索引出现在 where 子句中的每一列,查询现在可以正常运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM