我应该为多个连接使用单独的ODBC环境吗?

时间:2015-10-19 12:17:11

标签: c visual-studio-2010 odbc unixodbc

我需要打开与系统DB的连接,然后在内部打开租户数据库的连接。 目前我已经为每个连接实现了不同的环境句柄。

连接到系统DB,

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打开所有这些连接是否有效? 连接池怎么样?我们可以在这种情况下实施吗?

1 个答案:

答案 0 :(得分:1)

通常人们只使用一个环境并创建许多连接。我不知道使用多个环境有什么好处(除非您需要针对不同连接的不同环境设置 - 例如,您希望不同的连接池设置生效,在环境级别使用SQL_ATTR_CONNECTION_POOLING属性设置)。

此外,某些ODBC驱动程序不支持多个环境(有关DB2 ODBC 3.0驱动程序的声明,请参阅https://www-01.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/com.ibm.db2z11.doc.odbc/src/tpc/db2z_fnallochandle.dita。)