连接到安装了 mono 的 Informix DB 时出现 ODBC 错误
我最近在 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
- Mono 版本 2.6.7。
- CSDK 版本是“IBM Informix CSDK Version 3.50、IBM Informix-ESQL Version 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 并返回代码 0 (SQL_SUCCESS)
I have recently installed Mono on our Fedora Linux system so that we are able to run ASP.NET applications on it. I was able to get this part up and running, but the problem is we use a Informix DB and Mono seems to stop the ODBC from working.
Have anyone any experience of getting an ODBC to connect to an Informix DB with Mono installed?
We have:
- IBM Informix-ESQL Version 3.50.UC7
- unixODBC 2.2.14
- Informix SE version 7.25.UC6R1
- Mono version 2.6.7.
- CSDK version is "IBM Informix CSDK Version 3.50, IBM Informix-ESQL Version 3.50.UC7"
Any help would be greatly appreciated.
here is the full trace:
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)
When I ran it outside of Mono the connection was very similar except the EXIT SQLConnectW
gave -3 with return code 0 (SQL_SUCCESS)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
虽然您仅遇到 Mono 问题,但您可以尝试跟踪它。启用 ODBC 跟踪(一旦我在 Linux 上遇到问题,但 Informix 文档中有错误,请参阅:跟踪 Informix Client for Linux 的 ODBC 调用)。
从 isql 跟踪 Informix 客户端并保存跟踪文件,然后从 Mono 跟踪它并比较两个跟踪。在 Mono 跟踪中应该有更多关于发生的事情的信息。
Jonathan 要求您检查是否使用最新的 CSDK 库,并向我们展示您的驱动程序版本。也许您使用的是乔纳森所说的带有 Unicode bug 的旧驱动程序,您应该升级驱动程序吗?
While you have problem only with Mono you can try to trace it. Enable ODBC tracing (once I had problems with it on Linux, but there was error in Informix docs, see: Tracing ODBC calls for Informix Client for Linux).
Trace Informix client from
isql
and save trace file, then trace it from Mono and compare both traces. In Mono trace should be more information on what happened.Jonathan asked you to check if you use the newest CSDK library, show us your version of drivers. Maybe you use old drivers with Unicode bug Jonathan was talking about and you should upgrade drivers?