循环中的数据库连接或数据库连接循环

时间:2014-07-02 18:14:33

标签: c# for-loop sqlconnection

我相信他们两个都会奏效。但我想知道,我应该保持连接打开直到数据表循环完成?或者打开一个连接并在每次循环时关闭它以保持连接短路?

foreach (DataRow row in dt.Rows)
{
    using(SqlConnection con = new SqlConnection(conString))
    {
             // do things
    }
}

OR:

using(SqlConnection con = new SqlConnection(conString))
{
     foreach (DataRow row in dt.Rows)
    {
        // do things
    }        
}

4 个答案:

答案 0 :(得分:2)

普遍接受的立场是打开一个连接是昂贵的"就资源而言,您要对数据源进行的所有操作都应该在一个连接的范围内进行。这个想法有一些例外,但一般来说,您希望坚持使用单个连接实例。

答案 1 :(得分:2)

“保持连接简短”没有什么好处,因为在任何一种情况下,您仍然需要连接并在同一时间窗口内使用它。

反复打开/关闭的缺点是由于打开连接的开销导致的惩罚,导致大量不必要的流失。

此外,ADO连接池很可能会保持连接打开,所以你可能没有获得任何东西。

如果这是一个批处理进程(不在OLTP环境中),那么长期连接没有任何问题,只要代码在完成后正确清理,并且越早完成,你很快就没有把资源捆绑起来。

答案 2 :(得分:0)

这实际上取决于“//做事”是做什么的,但假设它是微不足道的,你应该选择后者,打开它,做你需要的,然后关闭它。

答案 3 :(得分:0)

如果您不希望每次循环都重新创建SqlConnection,那么您的代码几乎肯定会运行得更快。如果您要连接到允许同时连接的数据库(几乎任何客户端 - 服务器数据库),那么保持连接简短不应该是一个问题。我可以看到重新连接每一行的唯一原因是,如果您正在对基于文件的数据库(如SQLite)执行更新,即使这样,我认为它只在执行更新时锁定数​​据库文件,而不是在连接期间。 / p>