ODBC 连接:“连接已被禁用”
Posted
技术标签:
【中文标题】ODBC 连接:“连接已被禁用”【英文标题】:ODBC connection: "The connection has been disabled" 【发布时间】:2015-01-06 16:02:26 【问题描述】:我有一个名为 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/UnhandledUnhandled exceptionNMIALERTS.vshost.exeSystem.InvalidOperationException,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089连接已被禁用。在 System.Data.Odbc.OdbcConnection.ConnectionIsAlive(异常 innerException) 在 System.Data.Odbc.OdbcConnection.HandleErrorNoThrow(OdbcHandle hrHandle, RetCode retcode)
低于该错误:
错误 [42000] [IPeople][Meditech ODBC 驱动程序 (5.0.0.36)][IPD 3.41] 选择中没有字段 --- 内部异常堆栈跟踪结束 ---
当我在 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
【问题讨论】:
您必须记录内部异常。首次机会异常通知不一定表示存在问题。 @HansPassant 我将它添加到我的问题中。这让我更加困惑,但查询很好(在 Access 中工作) @LarsTech 不。从字面上看,IPEOPLE 中的所有数据元素都是文本。我不问为什么... 【参考方案1】:深挖136行错误后,发现这个被埋没了:
在目录“LIVE”中找不到数据库“xyz”,或者您的用户没有对该数据库的权限,或者该数据库未包含在 DSN 中
所以基本上我配置了 ODBC 错误。 VB没问题。这解决了更改此自定义驱动程序中的 ODBC 类型后的问题。
【讨论】:
您是如何“将 odbc 类型更改为自定义驱动程序”的?以上是关于ODBC 连接:“连接已被禁用”的主要内容,如果未能解决你的问题,请参考以下文章