C# 中的连接池是什么?如何实现?

csharpserver side programmingprogramming更新于 2025/10/17 13:07:17

它们用于导入命名空间(或为命名空间或类型创建别名)。

它们位于文件顶部,在任何声明之前。

using System;
using System.IO;
using WinForms = global::System.Windows.Forms;
using WinButton = WinForms::Button;

using 语句确保即使在创建对象、调用方法、属性等时发生异常,也会调用 Dispose()。Dispose() 是 IDisposable 接口中的方法,用于实现自定义垃圾回收。换句话说,如果我们正在进行某些数据库操作(插入、更新、删除),但不知何故发生了异常,则 using 语句会自动关闭连接,无需显式调用 Close() 方法。

另一个重要因素是它有助于连接池。.NET 中的连接池有助于避免多次关闭数据库连接。它将连接对象发送到池中以供将来使用(下一次数据库调用)。下次从应用程序调用数据库连接时,连接池会获取池中可用的对象。因此,它有助于提高应用程序的性能。因此,当我们使用 using 语句时,控制器会自动将对象发送到连接池,无需显式调用 Close() 和 Dispose() 方法。

using (Stream input = File.OpenRead(filename)) {
  ...
}

示例

string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
using (SqlConnection conn = new SqlConnection(connString)) {
   SqlCommand cmd = conn.CreateCommand();
   cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
   conn.Open();

   using (SqlDataReader dr = cmd.ExecuteReader()) {
      while (dr.Read())
      Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
   }
}

在上面的代码中,我们没有关闭任何连接,连接会自动关闭。由于使用了 using 语句,using 语句会自动调用 conn.Close()。

(using (SqlConnection conn = new SqlConnection(connString)) 和 SqlDataReader 对象也一样。此外,如果发生任何异常,连接也会自动关闭。


相关文章