Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - 编程 » OLE DB 和 ADO 开发

 

OLE DB 连接池

应当注意,适用于 OLE DB 的 .NET Framework 数据提供程序会使用 OLE DB 会话池自动将连接放入连接池中。当应用程序断开连接时,连接并未真正断开,而是会保持一段时间。当应用程序重新打开一个连接时,ADO/OLE DB 会认出该应用程序使用了完全相同的连接字符串并将重新使用打开的连接。例如,如果应用程序执行 "打开/执行/关闭" 100 次的操作,则其中只有一次真正的打开和一次真正的关闭。最终的关闭发生在空闲时间达到 1 分钟后。

如果连接被外部手段终止(例如被像 Sybase Central 这种管理工具强行断开),ADO/OLE DB 要到下一次与服务器交互时才会得知连接断开了。在实施强行断开之前应当仔细考虑。

有关 ADO 连接池的详细信息,请参阅 [external link] SQL Server Connection Pooling (ADO.NET)(SQL 服务器连接池 (ADO.NET))。另请参阅 [external link] Overriding Provider Service Defaults(覆盖提供程序服务缺省值)[external link] OLE DB, ODBC, and Oracle Connection Pooling (ADO.NET)(OLE DB、ODBC 和 Oracle 连接池 (ADO.NET))

控制连接池的标志是 DBPROPVAL_OS_RESOURCEPOOLING (1)。可以在连接字符串中使用一个连接参数来将此标志关闭。

如果在连接字符串中指定 OLE DB Services=-2,连接池将被禁用。下面是示例连接字符串:

Provider=SAOLEDB;OLE DB Services=-2;...

如果在连接字符串中指定 OLE DB Services=-4,连接池和事务征用将被禁用。下面是示例连接字符串:

Provider=SAOLEDB;OLE DB Services=-4;...

请注意,在禁用了连接池的情况下,若应用程序频繁地用相同的连接字符串打开/关闭连接,性能将大受影响。