SQLRateConnection 函数

一致性
推出版本:ODBC 3.81 标准合规:ODBC

总结
SQLRateConnection 决定驱动程序是否可以重复使用连接池中的现有连接。

Syntax

  
SQLRETURN  SQLRateConnection(  
                SQLHDBC_INFO_TOKEN   hRequest,  
                SQLHDBC              hCandidateConnection,  
                BOOL                 fRequiredTransactionEnlistment,  
                TRANSID              transId,  
                DWORD *              pRating );  

Arguments

h请求
[输入]一个代表新应用连接请求的令牌句柄。

hCandidateConnection
[输入]连接池中的现有连接。 连接必须处于开启状态。

fRequiredTransactionEnlistment
[输入]如果为真,则为新的连接请求(hRequest)重复使用现有连接的 hCandidateConnection,需要额外的一次挂载。

transId
[输入]如果 fRequiredTransactionEnlistmentTRUE,transId 代表请求将要列入的 DTC 事务。 如果 fRequiredTransactionEnlistmentFALSE,transID 将被忽略。

pRating(评级)
[输出] hCandidateConnectionhRequest的重用评级。 评分范围在0到100之间(含)。

Returns

SQL_SUCCESS、SQL_ERROR或SQL_INVALID_HANDLE。

诊断

驱动程序管理器不会处理该功能返回的诊断信息。

Remarks

SQLRateConnection 会生成 0 到 100 之间的分数,表示现有连接与请求的匹配程度。

分数 含义(SQL_SUCCESS归还时)
0 hCandidateConnection 不得用于 hRequest
任何介于1到98之间的数值(含) 分数越高, hCandidateConnectionhRequest的匹配越接近。
99 只有在无关紧要的属性上存在不匹配。 驾驶员经理应该停止评分循环。
100 完全匹配。 驾驶员经理应该停止评分循环。
任何其他大于100的数值 hCandidateConnection 被标记为死机,即使未来请求中也不会重复使用。

如果返回码不是SQL_SUCCESS(包括SQL_SUCCESS_WITH_INFO)或评分大于100,驱动管理器会将该连接标记为已死。 该死线不会被重复使用(即使是在未来的连接请求中),并且在CPTimeout通过后最终会超时。 司机经理会继续从池中寻找其他连接进行评分。

如果驱动程序管理器重用了得分严格小于100的连接(包括99),驱动程序管理器会调用SQLSetConnectAttr(SQL_ATTR_DBC_INFO_TOKEN)将连接重置回应用程序请求的状态。 驱动程序不应在此函数调用中重置连接。

如果 fRequiredTransactionEnlistment 为真,重用 hCandidateConnection 需要额外的 enlistment (transId != NULL) 或 unenlistment (transId == NULL)。 这表示重复使用连接的成本,以及如果要重用连接,驱动程序是否应该重新启用或取消连接。 如果 fRequireTransactionEnlistment 是 FALSE,驱动程序应忽略 transId

驱动管理器保证 hRequesthCandidateConnection 的父 HENV 句柄相同。 驱动程序管理器保证 与 hRequesthCandidateConnect 关联的池 ID 相同。

应用程序不应直接调用该函数。 支持驱动程序识别连接池的 ODBC 驱动程序必须实现此功能。

包含 sqlspi.h 以开发 ODBC 驱动。