У меня есть 32-разрядный разъем ODBC под названием IPEOPLE
Я пытаюсь подключиться с помощью VB. Если я открываю Access и использую диск ODBC IPEOPLE
, он работает нормально, и я могу видеть данные под одним и тем же пользователем.Подключение ODBC: «Соединение отключено»
В VB, я получаю такую ошибку:
A first chance exception of type 'System.InvalidOperationException' occurred in System.Data.dll System.Transactions Critical: 0 : http://msdn.microsoft.com/TraceCodes/System/ActivityTracing/2004/07/Reliability/Exception/Unhandled Unhandled exceptionNMIALERTS.vshost.exeSystem.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089The connection has been disabled. at System.Data.Odbc.OdbcConnection.ConnectionIsAlive(Exception innerException) at System.Data.Odbc.OdbcConnection.HandleErrorNoThrow(OdbcHandle hrHandle, RetCode retcode)
Ниже этой ошибки:
ERROR [42000] [IPeople][Meditech ODBC Driver (5.0.0.36)][IPD 3.41] No fields in select --- End of inner exception stack trace ---
При запуске SQL в Access, она работает просто отлично. Запрос в порядке. Очень четко выбирается поле (LIVE.NMISAA.QueueMessages.MessageID
).
И я не совсем уверен, почему. Это не отключено. Его можно использовать просто через Access. В Windows ODBC Data Source Administrator отсутствует индикатор «disabled». «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
Любые мысли?
EDIT: Я перестроил код с нуля от 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
Вы должны задокументировать внутреннее исключение. Уведомление об исключении из первого шанса не обязательно указывает на проблему. –
@HansPassant Я добавил его к моему вопросу. Это меня смущает, но запрос просто прекрасен (работает в Access) – JBurace
@LarsTech Nope. Буквально все элементы данных в IPEOPLE являются Text. Я не спрашиваю, почему ... – JBurace