连接到安装了单声道的 Informix DB 时出现 ODBC 错误
Posted
技术标签:
【中文标题】连接到安装了单声道的 Informix DB 时出现 ODBC 错误【英文标题】:ODBC error when connecting to Informix DB with mono installed 【发布时间】:2010-09-15 08:21:28 【问题描述】:我最近在我们的 Fedora Linux 系统上安装了 Mono,以便我们能够在其上运行 ASP.NET 应用程序。我能够启动并运行这部分,但问题是我们使用 Informix DB,而 Mono 似乎阻止了 ODBC 工作。
有没有人有过让 ODBC 连接到安装了 Mono 的 Informix DB 的经验?
我们有:
IBM Informix-ESQL 版本 3.50.UC7 unixODBC 2.2.14 Informix SE 版本 7.25.UC6R1 单声道版本 2.6.7。 CSDK 版本为“IBM Informix CSDK 版本 3.50,IBM Informix-ESQL 版本 3.50.UC7”任何帮助将不胜感激。
这是完整的跟踪:
ppid=00003564,pid=00000000 ENTER SQLSetEnvAttr
SQLHENV 0x087489C8
SQLINTEGER 200
SQLPOINTER 0x00000003
SQLINTEGER 0
ppid=00003564,pid=00000000 EXIT SQLSetEnvAttr
SQLHENV 0x087489C8
SQLINTEGER 200
SQLPOINTER 0x00000003
SQLINTEGER 0 with return code 0 (SQL_SUCCESS)
ppid=00003564,pid=00000000 ENTER SQLGetEnvAttr
SQLHENV 0x087489C8
SQLINTEGER 200
SQLPOINTER 0xBFBF84F0
SQLINTEGER 0
SQLINTEGER * 0x04D05CA0
ppid=00003564,pid=00000000 EXIT SQLGetEnvAttr
SQLHENV 0x087489C8
SQLINTEGER 200
SQLPOINTER 0xBFBF84F0
SQLINTEGER 0
SQLINTEGER * 0x04D05CA0 with return code 0 (SQL_SUCCESS)
ppid=00003564,pid=00000000 ENTER SQLAllocHandle
SQLSMALLINT 2
SQLHANDLE 0x087489c8
SQLHANDLE * 0x0874c4c8
ppid=00003564,pid=00000000 EXIT SQLAllocHandle
SQLSMALLINT 2
SQLHANDLE 0x087489c8
SQLHANDLE * 0x0874c4c8 with return code 0 (SQL_SUCCESS)
ppid=00003564,pid=00000000 ENTER SQLSetConnectAttrW
SQLHDBC 0x08758F88
SQLINTEGER 115
SQLPOINTER 0x04D05CA0
SQLINTEGER 0
SQLINTEGER * 0x00000000
ppid=00003564,pid=00000000 EXIT SQLSetConnectAttrW
SQLHDBC 0x08758F88
SQLINTEGER 115
SQLPOINTER 0x04D05CA0
SQLINTEGER 0
SQLINTEGER * 0x00000000 with return code -1 (SQL_ERROR)
ppid=00003564,pid=00000000 ENTER SQLConnectW
SQLHDBC 0x08758F88
SQLWCHAR i
SQLSMALLINT -3
SQLWCHAR * *****
SQLSMALLINT -3
SQLWCHAR * *****
SQLSMALLINT -3
ppid=00003564,pid=00000000 EXIT SQLConnectW
SQLHDBC 0x08758F88
SQLWCHAR i
SQLSMALLINT -3
SQLWCHAR * *****
SQLSMALLINT -3
SQLWCHAR * *****
SQLSMALLINT -3 with return code -1 (SQL_ERROR)
ppid=00003564,pid=00000000 ENTER SQLGetDiagRecW
,SQLSMALLINT 2
SQLHANDLE 0x08758F88
SQLSMALLINT 1
SQLWCHAR * ^R
SQLINTEGER * 0xBFBF96E0
SQLWCHAR * ~B
SQLSMALLINT 1026
SQLSMALLINT * 0xBFBF96EA
ppid=00003564,pid=00000000 EXIT SQLGetDiagRecW
,SQLSMALLINT 2
SQLHANDLE 0x08758F88
SQLSMALLINT 1
SQLWCHAR * I
SQLINTEGER * 0xBFBF96E0
SQLWCHAR * [
SQLSMALLINT 1026
SQLSMALLINT * 0xBFBF96EA with return code 0 (SQL_SUCCESS)
ppid=00003564,pid=00000000 ENTER SQLGetDiagRecW
,SQLSMALLINT 2
SQLHANDLE 0x08758F88
SQLSMALLINT 2
SQLWCHAR * I
SQLINTEGER * 0xBFBF96E0
SQLWCHAR * [
SQLSMALLINT 1026
SQLSMALLINT * 0xBFBF96EA
ppid=00003564,pid=00000000 EXIT SQLGetDiagRecW
,SQLSMALLINT 2
SQLHANDLE 0x08758F88
SQLSMALLINT 2
SQLWCHAR * I
SQLINTEGER * 0xBFBF96E0
SQLWCHAR * [
SQLSMALLINT 1026
SQLSMALLINT * 0xBFBF96EA with return code 100 (SQL_NO_DATA_FOUND)
ppid=00003564,pid=00000000 ENTER SQLFreeHandle
SQLSMALLINT 2
SQLHANDLE 0x08758f88
ppid=00003564,pid=00000000 EXIT SQLFreeHandle
SQLSMALLINT 2
SQLHANDLE 0x00000000 with return code 0 (SQL_SUCCESS)
ppid=00003564,pid=00000000 ENTER SQLFreeHandle
SQLSMALLINT 1
SQLHANDLE 0x087489c8
ppid=00003564,pid=00000000 EXIT SQLFreeHandle
SQLSMALLINT 1
SQLHANDLE 0x00000000 with return code 0 (SQL_SUCCESS)
当我在 Mono 之外运行它时,连接非常相似,除了 EXIT SQLConnectW
给了 -3 with return code 0 (SQL_SUCCESS)
【问题讨论】:
您是否尝试过从其他 ODBC 工具(如 unixODBC)连接 Informix? Mono 显示什么错误? 您使用的是哪个版本的 Informix ODBC 驱动程序?或者您使用的是哪个版本的 Informix CSDK?我确实在使用稍旧版本的 ODBC 的 Mono 环境中遇到了 Unicode 转换问题;它已在 ODBC 的最新版本中得到修复。但我必须查找错误编号等。 您好,感谢您的回复。我们正在运行 unixODBC 2.2.14 和 Informix SE 版本 7.25.UC6R1。我们安装了 Mono 2.6.7 版。 嗨,我可以说我们可以使用 php 和 C 连接到 ODBC,但不能使用 Mono。我没有收到正确的错误,就好像这是一个 Unicode 问题。当我输出错误时,我只得到 'Error:ERROR [I000] [unixODBC][' 弗兰基,我不知道出了什么问题。您可以尝试使用SQLIDEBUG
跟踪它,也许在此跟踪中会有一些错误描述?
【参考方案1】:
虽然只有 Mono 有问题,但您可以尝试跟踪它。启用 ODBC 跟踪(一旦我在 Linux 上遇到问题,但 Informix 文档中出现错误,请参阅:Tracing ODBC calls for Informix Client for Linux)。
从isql
跟踪 Informix 客户端并保存跟踪文件,然后从 Mono 跟踪它并比较两个跟踪。在 Mono 跟踪中应该有更多关于发生了什么的信息。
Jonathan 要求您检查是否使用最新的 CSDK 库,向我们展示您的驱动程序版本。也许您使用 Jonathan 所说的存在 Unicode 错误的旧驱动程序,您应该升级驱动程序?
【讨论】:
您好,感谢您的回复,CSK 版本是“IBM Informix CSDK 版本 3.50,IBM Informix-ESQL 版本 3.50.UC7”。以上是关于连接到安装了单声道的 Informix DB 时出现 ODBC 错误的主要内容,如果未能解决你的问题,请参考以下文章
如何从 AWS Lambda Python 连接到 Informix DB
在 Windows 上使用 pyodbc 连接到 Informix
从 Windows 通过 Entity Framework 连接到 Informix 的问题