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

标签 c# sql sql-server

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

我目前正在编写一些代码,这些代码将调用数据库、检索 n 条记录、处理它们并将一些数据写回数据库。

我看到有两种方法(伪代码):

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();
}

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

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

我很好奇什么是更好的做法。我觉得是后者,但它也将与我的数据库建立或多或少的永久/持久连接。我担心可能的内存溢出或类似的情况。

想法?

斯科特

最佳答案

ADO.Net Sqlclient 提供程序(我假设您将使用它,因为您说的是 C#)自动执行连接池,请参阅 SQL Server Connection Pooling (ADO.NET) .当您调用 Close 时,合并的连接并没有真正关闭,它们只是返回到池中。 “打开”和“关闭”池连接非常快。

不相关的注意事项:您应该将连接嵌入到 using block 中:

using (SqlConnection conn = new SqlConnection(...))
{
   conn.Open ();
   ...
}

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

关于c# - 持久数据库连接与打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7302299/

相关文章:

sql-server - 找不到表[表名] -2147189180

c# - 如何解决无法建立连接,因为目标机器主动拒绝它 127.0.0.1 :64527

c# - 接收 : Count of Grouped Events in Moving Window

sql - 如何在列中找到第二个值

PHP函数查找MySQL中列的中位数

mysql - mySQL/SQL 中的 count(0)、count(1).. 和 count(*) 有什么区别?

sql - 列表从多到少排序;制作家庭电影最多的创作者将名列榜首

c# - 包装任务返回方法的任何问题

c# - 默认情况下委托(delegate)是静态的吗?

sql - SSIS 无法读取 excel 文件中的列结尾(Excel 连接管理器)