日期:2014-05-18  浏览次数:20899 次

ADO.net中的连接池,仅适用于对SQLSERVER的连接还是也对ACCESS、Oracle也适用?
如题。
请高手解答。

------解决方案--------------------
不适用,每个都有自己的连接方式
------解决方案--------------------
继承自DbConnection的 默认都会使用 DbConnectionPoolGroup
------解决方案--------------------
全部实用
------解决方案--------------------
ADO.net中的连接池 可连接所有数据库, 只是用到的ODBC不一样
------解决方案--------------------
不一样,分三种:

1、OLE DB .NET Framework 数据提供程序连接池

2、ODBC .NET Framework 数据提供程序的连接池

3、Oracle .NET Framework 数据提供程序连接池

连接到数据库服务器通常由几个需要很长时间的步骤组成。必须建立物理通道(例如套接字或命名管道),必须与服务器进行初次握手,必须分析连接字符串信息,必须由服务器对连接进行身份验证,必须运行检查以便在当前事务中登记,等等。 

实际上,大多数应用程序仅使用一个或几个不同的连接配置。这意味着在执行应用程序期间,许多相同的连接将反复地打开和关闭。为了使打开的连接成本最低,ADO.NET 使用称为连接池的优化方法。

连接池减少新连接需要打开的次数。池进程保持物理连接的所有权。通过为每个给定的连接配置保留一组活动连接来管理连接。只要用户在连接上调用 Open,池进程就会检查池中是否有可用的连接。如果某个池连接可用,会将该连接返回给调用者,而不是打开新连接。应用程序在该连接上调用 Close 时,池进程会将连接返回到活动连接池集中,而不是真正关闭连接。连接返回到池中之后,即可在下一个 Open 调用中重复使用。

只有配置相同的连接可以建立池连接。ADO.NET 同时保留多个池,每个配置一个池。连接由连接字符串以及 Windows 标识(在使用集成的安全性时)分为多个池。

池连接可以大大提高应用程序的性能和可缩放性。默认情况下,ADO.NET 中启用连接池。除非显式禁用,否则,连接在应用程序中打开和关闭时,池进程将对连接进行优化。还可以提供几个连接字符串修饰符来控制连接池的行为。

池的创建和分配:
在初次打开连接时,将根据完全匹配算法创建连接池,该算法将池与连接中的连接字符串关联。每个连接池与不同的连接字符串关联。打开新连接时,如果连接字符串并非与现有池完全匹配,将创建一个新池。按进程、按应用程序域、按连接字符串以及(在使用集成的安全性时)按 Windows 标识来建立池连接。

移除连接:
连接池进程定期扫描连接池,查找没有通过 Close 或 Dispose 关闭的未用连接,并重新建立找到的连接。如果应用程序没有显式关闭或断开其连接,连接池进程可能需要很长时间才能重新建立连接,所以,最好确保在连接中显式调用 Close 和 Dispose。

如果连接长时间空闲,或池进程检测到与服务器的连接已断开,连接池进程会将该连接从池中移除。注意,只有在尝试与服务器进行通信之后才能检测到断开的连接。如果发现某连接不再连接到服务器,则会将其标记为无效。无效连接只有在关闭或重新建立后,才会从连接池中移除。

------解决方案--------------------
没用过ACCESS,不知道,但是对Oracle肯定适用。是否适用,只要查看相关类的说明文档就知道了。
------解决方案--------------------
SQL server、MySql都适用,access不清楚。
------解决方案--------------------
using System;
using System.Collections.Generic;
using System.Text;

using System.Data.OracleClient;
using System.Data.SqlClient;
using System.Data.OleDb;

namespace DataBaseAccessLib
{
/// <summary>
/// 使用数据库类型
/// </summary>
public enum DBType
{
/// <summary>
/// sql Server 数据库
/// </summary>
SQL,

/// <summary>
/// Oracle 数据库
/// </summary>
ORACLE,

/// <summary>
/// ACCESS 数据库
/// </summary>
ACCESS
}

/// <summary>
/// 获取访问数据库的对象类
/// </summary>
public class DBFactory
{
/// <summary>
/// 获取访问数据库的对象
/// </summary>
/// <param name="type">数据库类别</param>
/// <param name="connectionString">连接字符串</param>
/// <returns>数据库的对象</returns>
public static IDBAccess GetDBAccess(DBType type, string connectionString)
{
System.Diagnostics.Debug.Assert(connectionString.Length > 0);

IDBAccess DB = null;

switch (type)
{
case DBType.ORACLE:
DB = new DBAccess<OracleConnection, OracleCommand, OracleDataAdapter>(connectionString);
break;

case DBType.SQL:
DB = new DBAccess<SqlConnection, SqlCommand,SqlDataAdapter>(connectionString);
break;