信息: 如何启用 ODBC 应用程序中的连接池

文章翻译 文章翻译
文章编号: 164221
展开全部 | 关闭全部

概要

本文介绍如何启用连接池,在 ODBCapplication 中。

更多信息

Microsoft ODBC 3.0 版引入了连接池的概念。
连接池允许 ODBC 应用程序重用现有的
连接池,所以没有多哥 ODBC 应用程序。
完成对任何后续连接完成连接的过程。

当 ODBC 应用程序断开连接时,连接将保存
为一组,而不是实际断开连接。多长时间此 connectionremains
在池中取决于 ODBC 驱动程序的 CPTimeout 属性。当
超时时间到期,关闭并从池中删除连接。ODBC
应用程序可以使用 SQLConfigDriver valueof CPTimeout,并且此更改
值适用于所有的 ODBC 应用程序该着指定的 ODBC 驱动程序。

CPTimeout 的默认值是 60seconds。连接池为 ODBC 应用程序 (如 MicrosoftInternet 时非常有用
信息的服务器 (例如) 连接和 disconnectsfrequently。Microsoft
Internet 信息服务器 (IIS) 3.0 版 withActive 服务器页面 (ASP)
利用连接池。您 canenable 连接池的
IIS 用户通过更改StartConnectionPool的值为 1。StartConnectionPool位于:
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\W3SVC\ASP\Parameters
ODBC 应用程序可以使用 SQLSetEnvAttr 来启用连接池。以下是如何启用连接池,在 ODBCapplication 的一个示例:
   #include <windows.h>
   #include <stdio.h>
   #include <sql.h>
   #include <sqlext.h>

   void main()
   {
   SQLHENV   henv;
   SQLHDBC   hdbc;
   int       i=0;

   if (!SQL_SUCCEEDED(SQLSetEnvAttr(
      NULL,  // make process level cursor pooling
      SQL_ATTR_CONNECTION_POOLING,
      (SQLPOINTER)SQL_CP_ONE_PER_DRIVER,
      SQL_IS_INTEGER)))
   printf("SQLSetEnvAttr/SQL_ATTR_CONNECTION_POOLING error\n");

   if (!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv)))
      printf("SQLAllocHandle error\n");

   // set the ODBC behavior version.
   if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
   (SQLPOINTER) SQL_OV_ODBC2, SQL_IS_INTEGER)))
      printf("SQLSetEnvAttr/SQL_ATTR_ODBC_VERSION error\n");

   //set the matching condition for using an existing connection in the
   pool
   if (!SQL_SUCCEEDED(SQLSetEnvAttr(henv, SQL_ATTR_CP_MATCH,
   (SQLPOINTER) SQL_CP_RELAXED_MATCH, SQL_IS_INTEGER)))
   printf("SQLSetEnvAttr/SQL_ATTR_CP_MATCH error\n");

while (i < 10) {
   if (!SQL_SUCCEEDED(SQLAllocHandle(SQL_HANDLE_DBC,
      henv, &hdbc)))
      printf("SQLAllocHandle error\n");
      if (!SQL_SUCCEEDED(SQLConnect(hdbc,
   (unsigned char*)"testing\0", SQL_NTS,
      (unsigned char*)"sa\0", SQL_NTS,
   (unsigned char*)"\0", SQL_NTS)))
      printf("SQLConnect error\n");
   else
      printf("Connect successfully %d times\n", i);
   //the first time, the application calls SQLDisconenct, it will return
                 //the connection to the //pool
   SQLDisconnect(hdbc);

   if (!SQL_SUCCEEDED(SQLFreeHandle(SQL_HANDLE_DBC, hdbc)))
      printf("SQLFreeHandle error\n");
   i++;
   }
   SQLFreeHandle(SQL_HANDLE_ENV, henv);
   }
				
当 ODBC 应用程序在第一次调用SQLDisconnect时,此项连接会保存到库中。任何后续 SQLConnect/SQLDisconnectthat 匹配所需条件将重新使用第一个连接。

属性

文章编号: 164221 - 最后修改: 2013年11月1日 - 修订: 2.0
关键字:?
kbinfo kbprogramming kbmt KB164221 KbMtzh
机器翻译
重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。
点击这里察看该文章的英文版: 164221
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。
不再更新的 KB 内容免责声明
本文介绍那些 Microsoft 不再提供支持的产品。因此本文按“原样”提供,并且不再更新。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com