我有一个名为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
答案 0 :(得分:0)
在重新回到136线错误之后,我发现这个被埋没了:
在目录“LIVE”中找不到数据库'xyz',或者您的用户没有数据库的权限,或者数据库未包含在DSN中
所以基本上我把ODBC配置错了。 VB没问题。这在更改此自定义驱动程序中的ODBC类型后解决了该问题。