2015-01-06 8 views
1

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 
+0

내부 예외를 문서화해야합니다. 첫 번째 예외 예외 통지가 반드시 문제를 나타내는 것은 아닙니다. –

+0

@HansPassant 나는 내 질문에 그것을 추가했습니다. 그것은 나를 더 혼란스럽게 만들지 만 질의는 괜찮습니다 (Access에서 작동합니다) – JBurace

+0

@LarsTech Nope. 문자 그대로 IPEOPLE의 모든 데이터 요소는 텍스트입니다. 나는 이유를 묻지 않는다 ... – JBurace

답변

0

136 줄 오류로 다시 파고 후, 나는이 묻혀 : 그러니까 기본적으로 나는 ODBC 잘못 구성한

Database 'xyz' was not found in catalog 'LIVE' or your user does not have rights to the database or the database was not included in the DSN

여기 내 전체 코드입니다. VB는 괜찮 았어. 이것은이 사용자 정의 드라이버에서 ODBC 유형을 변경 한 후에 문제를 해결했습니다.

+0

"어떻게 odbc 유형을 커스텀 드라이버로 바꿨습니까"? –