我应该为多个连接使用单独的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驱动程序的这种情况)。