我应该为多个连接使用单独的ODBC环境吗?
问题描述:
我需要打开到系统DB的连接,然后在内部打开租户数据库的连接。 目前我已经为每个连接实现了不同的环境句柄。我应该为多个连接使用单独的ODBC环境吗?
连接到系统数据库,
retCode = SQLAllocConnect(sqlEnvHandle , &sqlConnectionHandle);
retCode=SQLDriverConnect (sqlConnectionHandle,
NULL,
(SQLCHAR*)ConnString,
SQL_NTS,
retConnString,
BUFFER_SIZE,
NULL,
SQL_DRIVER_NOPROMPT);
连接到租户数据库,其中“I”迭代到租户数据库的数量,并打开每个租户数据库连接,
retCode = SQLAllocConnect(TenantDBConnectionObj[i].sqlTenantEnvHandle, &TenantDBConnectionObj[i].sqlTenantConnectionHandle);
retCode=SQLDriverConnect(TenantDBConnectionObj[i].sqlTenantConnectionHandle,
NULL,
ConnString,
SQL_NTS,
retConnString,
BUFFER_SIZE,
NULL,
SQL_DRIVER_NOPROMPT);
是否有效编程打开所有这些连接只需一个环境处理sqlEnvHandle
? 连接池怎么样?我们可以在这种情况下实施吗?
答
通常情况下,人们只使用一个环境并创建多个连接。我不知道使用多个环境有什么优势(除非您需要为不同的连接设置不同的环境设置 - 例如,您希望不同的连接池设置生效,并在环境级别使用SQL_ATTR_CONNECTION_POOLING属性进行设置)。
此外,某些ODBC驱动程序不支持多个环境(请参阅https://www-01.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/com.ibm.db2z11.doc.odbc/src/tpc/db2z_fnallochandle.dita了解DB2 ODBC 3.0驱动程序的这种情况)。