我相信他们两个都会奏效。但我想知道,我应该保持连接打开直到数据表循环完成?或者打开一个连接并在每次循环时关闭它以保持连接短路?
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
}
}
答案 0 :(得分:2)
普遍接受的立场是打开一个连接是昂贵的"就资源而言,您要对数据源进行的所有操作都应该在一个连接的范围内进行。这个想法有一些例外,但一般来说,您希望坚持使用单个连接实例。
答案 1 :(得分:2)
“保持连接简短”没有什么好处,因为在任何一种情况下,您仍然需要连接并在同一时间窗口内使用它。
反复打开/关闭的缺点是由于打开连接的开销导致的惩罚,导致大量不必要的流失。
此外,ADO连接池很可能会保持连接打开,所以你可能没有获得任何东西。
如果这是一个批处理进程(不在OLTP环境中),那么长期连接没有任何问题,只要代码在完成后正确清理,并且越早完成,你很快就没有把资源捆绑起来。
答案 2 :(得分:0)
这实际上取决于“//做事”是做什么的,但假设它是微不足道的,你应该选择后者,打开它,做你需要的,然后关闭它。
答案 3 :(得分:0)
如果您不希望每次循环都重新创建SqlConnection,那么您的代码几乎肯定会运行得更快。如果您要连接到允许同时连接的数据库(几乎任何客户端 - 服务器数据库),那么保持连接简短不应该是一个问题。我可以看到重新连接每一行的唯一原因是,如果您正在对基于文件的数据库(如SQLite)执行更新,即使这样,我认为它只在执行更新时锁定数据库文件,而不是在连接期间。 / p>