ODBC连接:“连接已被禁用”

时间:2015-01-06 16:02:27

标签: vb.net odbc

我有一个名为IPEOPLE的32位ODBC连接器我正在尝试使用VB进行连接。如果我打开Access并使用ODBC驱动器IPEOPLE,它可以正常工作,我可以在同一个用户下看到数据。

在VB中,我遇到了这种错误:

  

System.Data.dll中发生了'System.InvalidOperationException'类型的第一次机会异常   System.Transactions严重:0:http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled未处理的exceptionNMIALERTS.vshost.exeSystem.InvalidOperationException,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089已禁用连接。在System.Data.Odbc.OdbcConnection.ConnectionIsAlive(Exception innerException)      在System.Data.Odbc.OdbcConnection.HandleErrorNoThrow(OdbcHandle hrHandle,RetCode retcode)

低于该错误:

  

ERROR [42000] [IPeople] [Meditech ODBC Driver(5.0.0.36)] [IPD 3.41] select中没有字段      ---内部异常堆栈跟踪结束---

当我在Access中运行SQL时,它运行正常。查询没问题。非常清楚地选择了一个字段(LIVE.NMISAA.QueueMessages.MessageID)。

我不确定为什么。它没有被禁用。它可以通过Access使用。 Windows ODBC数据源管理器上没有“禁用”指示符。 “NMIALERTS2”是我机器上的用户DSN。

代码:

    Dim myConnection As OdbcConnection = New OdbcConnection()
    myConnection.ConnectionString = "DSN=NMIALERTS2"

    Dim strQueryErxE1 As String = "SELECT LIVE.NMISAA.QueueMessages.MessageID FROM LIVE.NMISAA.QueueMessages " & _
        "WHERE LIVE.NMISAA.QueueMessages.QueueConnection = 'ERX_E_XO' and LIVE.NMISAA.QueueMessages.MessageID > '" & strPrevMsgID_ERX_E_XO & "'"

        Dim command1 As OdbcCommand
        Dim command2 As OdbcCommand

        If Active_ERX_E_XO = True Then
            command1 = New OdbcCommand(strQueryErxE1, connection) 'errors here
            command2 = New OdbcCommand(strQueryErxE2, connection)
        End If

有什么想法吗?

编辑:我已经从头开始将代码从4000行重建为最少30行,以便仅测试ODBC,并且发生了完全相同的问题。这是我的整个代码:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim myConnection As System.Data.Odbc.OdbcConnection = New System.Data.Odbc.OdbcConnection()
        myConnection.ConnectionString = "DSN=NMIALERTS2"

        Dim strQueryErxE1 As String = "SELECT LIVE.NMISAA.QueueMessages.MessageID FROM LIVE.NMISAA.QueueMessages " & _
    "WHERE LIVE.NMISAA.QueueMessages.QueueConnection = 'ERX_E_XO' and LIVE.NMISAA.QueueMessages.MessageID > '3000'"

        Dim command1 As System.Data.Odbc.OdbcCommand
        Dim strIIRADT1 As String = ""

        Using connection As New System.Data.Odbc.OdbcConnection(myConnection.ConnectionString)

            command1 = New System.Data.Odbc.OdbcCommand(strQueryErxE1, connection) 'error here

            connection.Open()

            Dim reader1 As System.Data.Odbc.OdbcDataReader

            reader1 = command1.ExecuteReader()

            If reader1.HasRows Then
                While reader1.Read
                    strIIRADT1 = reader1(0).ToString
                End While
            End If

        End Using

    End Sub
End Class

1 个答案:

答案 0 :(得分:0)

在重新回到136线错误之后,我发现这个被埋没了:

  

在目录“LIVE”中找不到数据库'xyz',或者您的用户没有数据库的权限,或者数据库未包含在DSN中

所以基本上我把ODBC配置错了。 VB没问题。这在更改此自定义驱动程序中的ODBC类型后解决了该问题。