我正在为ODBC创建经典的ADO连接池,如这篇知识库文章所述
http://support.microsoft.com/kb/237844
但是,在执行SQLSetEnvAttr函数时,我收到一个很大的数字作为返回值。准确地说是147082878。
这个数字是什么意思?根据知识库文章,任何非0的数字都是错误的,但是这个非常大的数字并不对应于任何ODBC错误常量。
谢谢。
编辑:包含的代码:
Dim rc As Long
Const SQL_ATTR_CONNECTION_POOLING = 201
Const SQL_CP_ONE_PER_DRIVER = 1
Const SQL_IS_INTEGER = -6
Const SQL_CP_OFF = 0
#If Win32 Then
Private Declare Function SQLSetEnvAttr Lib "odbc32.dll" (ByVal EnvironmentHandle As Long, _
ByVal EnvAttribute As Long, _
ByVal ValuePtr As Long, _
ByVal StringLength As Long) As Integer
#End If
''' <summary>
'''
''' Call connection pool for new connections (ODBC)
'''
''' </summary>
''' <remarks></remarks>
Private Sub ConnectionPool()
Try
rc = SQLSetEnvAttr(0&, _
SQL_ATTR_CONNECTION_POOLING, _
SQL_CP_ONE_PER_DRIVER, _
SQL_IS_INTEGER)
If rc <> 0 Then
#If DEBUG Then
System.Diagnostics.Debugger.Break()
#End If
End If
Catch ex As Exception
#If DEBUG Then
System.Diagnostics.Debugger.Break()
#End If
End Try
End Sub发布于 2014-01-23 14:48:47
免责声明:到目前为止,我只从C API (而不是ADO)使用ODBC。
通常,所有SQL... ODBC函数都会传递一个句柄作为第一个参数,但是在连接池的情况下,会传递给SQLSetEnvAttr一个NULL句柄。(在按照kb文章中的说明分配环境句柄之前,这样做很重要。)
如果返回值指示失败,您可以运行SQLGetDiagRec (或SQLGetDiagField)获取错误详细信息。
我不知道SQLGetDiag...函数是否可以在NULL句柄上工作,但这是我首先要尝试的。
https://stackoverflow.com/questions/21286609
复制相似问题