持久数据库连接与打开和关闭

Sco*_*lvi 4 c# sql sql-server

我有一个sql server 2k8数据库,每天填充数十万条记录.

我正在编写一些代码,它们将调用db,检索n条记录,处理它们,并将一些数据写回db.

我有两种方法可以做到这一点(伪代码):

function xyz() {
    conn = conn creation code
    conn.open();
    while(not last record) {
        select next 1000 records
        process each record
        last record = true
    }
    conn.close();
    xyz();
}
Run Code Online (Sandbox Code Playgroud)

基本上每批创建一个连接.第二种方法:

function xyz() {
    conn = connection creation code
    while(conn.open();) {
        select next 1000 records
        process each record
        last record = true
    }
    conn.close();
    xyz();
}
Run Code Online (Sandbox Code Playgroud)

我很好奇什么是更好的做法.我觉得它是后者,但它也会与我的数据库建立一个或多或少的永久/持久连接.我担心可能的内存超支或其他一些问题.

思考?

斯科特

Rem*_*anu 8

ADO.Net Sqlclient提供程序(我假设您将使用,因为您说是C#)自动执行连接池,请参阅SQL Server连接池(ADO.NET).当您调用Close时,池连接不会真正关闭,它们只是返回池中.'开放'和'关闭'汇集连接非常快.

不相关的说明:你应该在一个using块中嵌入你的连接:

using (SqlConnection conn = new SqlConnection(...))
{
   conn.Open ();
   ...
}
Run Code Online (Sandbox Code Playgroud)

这样可以避免在异常情况下泄漏连接.