【问题标题】:Classic ADO SQLSetEnvAttr Return Code经典 ADO SQLSetEnvAttr 返回码
【发布时间】:2014-01-22 15:08:49
【问题描述】:

我正在为 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

【问题讨论】:

  • 您标记了 VB.Net 和 VB6。您实际使用的是哪种语言? (编辑您的问题以删除无效标记。)另外,您是否有不能使用 OLE DB 驱动程序的原因?最后,您应该编辑您的帖子以包含重现错误的代码。
  • 您好,抱歉,这是一个通过自动转换工具移植到 VB.net 的 VB6 应用程序,所以它包含大量遗留代码。该代码是针对 {Microsoft ODBC for Oracle} 驱动程序开发的,在大量连接后尝试 Oracle 客户端驱动程序时出现“尝试访问受保护或只读内存”错误,因此我们恢复到旧版驱动程序,直到我们可以在 ADO.NET 或 ODP.NET 中重新开发。我将添加代码来演示。

标签: vb.net oracle odbc ado


【解决方案1】:

免责声明:到目前为止,我只使用过来自 C API(而不是来自 ADO)的 ODBC。

通常所有SQL... ODBC 函数都传递一个句柄作为第一个参数,但在连接池SQLSetEnvAttr 的情况下传递一个NULL 句柄。 (请务必在分配环境句柄之前执行此操作,如 kb 文章中所述。)

如果返回值表示失败,可以运行SQLGetDiagRec(或SQLGetDiagField)获取错误详情。

我不知道SQLGetDiag... 函数是否适用于NULL 句柄,但这是我首先要尝试的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多