IPEOPLE
이라는 32 비트 ODBC 커넥터가 있습니다. VB를 사용하여 연결하려고합니다. Access를 열고 ODBC 드라이브 IPEOPLE
을 사용하면 문제없이 작동하며 동일한 사용자로 데이터를 볼 수 있습니다. 해당 오류 아래ODBC 연결 : "연결이 비활성화되었습니다."
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)
: 나는 Access에서 SQL을 실행하면
ERROR [42000] [IPeople][Meditech ODBC Driver (5.0.0.36)][IPD 3.41] No fields in select --- End of inner exception stack trace ---
, 그것은 잘 작동 VB에서
, 나는 이런 종류의 오류를 얻고있다. 쿼리가 정상입니다. 선택한 필드가 매우 분명합니다 (LIVE.NMISAA.QueueMessages.MessageID
).
그리고 왜 그럴지 잘 모르겠습니다. 그것은 무능력하지 않습니다. 그것은 액세스를 통해 잘 사용할 수 있습니다. 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
어떤 생각?
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의 모든 데이터 요소는 텍스트입니다. 나는 이유를 묻지 않는다 ... – JBurace