注册

Linux使用C++开发ODBC接口,SQL查询问题

白梦 2024/05/06 566 2

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8_20240116_x86_rh7_64
【操作系统】:Linux - 4.19.90-52.22.v2207.ky10.x86_64(VMware Workstation 16.1.2.8432)
【CPU】:AMD Ryzen 7 5800H
【问题描述】*:使用unixodbc,配置好libdodbc.so,程序开始,初始化一次henv,之后初始化16个hdbc,连接也都正常,但是取出一个hdbc,初始化一个htmt,进行查询SQLExecDirectA,查询前先SQLFreeStmt(htmt,SQL_CLOSE),再通过SQLFetch获取第一行数据,报了没有绑定,问题是之前有几次也没绑定也能SQLGetData获取到数据,但发现SQLExecDirectA有返回 HY100 解压缩失败,发现可能是先查询没有全部初始化16个hdbc的问题,调整了顺序,还改了SQLFreeStmt这里(删了又加上),其他基本没调整,现在又发现绑定的问题,一定要绑定吗?这个htmt要执行多个查询,我每次执行前肯定要SQLFreeStmt上次查询的数据。

日志如下:
[ODBC][5452][1714972376.665772][../../DriverManager/SQLConnect.c][4648]
Exit:[SQL_SUCCESS]
[ODBC][5452][1714972376.665882][../../DriverManager/SQLGetConnectAttr.c][292]
Entry:
Connection = 0x4f9830
Attribute = 1209
Value = 0x7fffffffce78
Buffer Length = 4
StrLen = (nil)
[ODBC][5452][1714972376.670931][../../DriverManager/SQLGetConnectAttr.c][840]
Exit:[SQL_SUCCESS]
[ODBC][5452][1714972376.671004][../../DriverManager/SQLAllocHandle.c][632]
Entry:
Handle Type = 3
Input Handle = 0x4f9830
[ODBC][5452][1714972376.672595][../../DriverManager/SQLAllocHandle.c][1177]
Exit:[SQL_SUCCESS]
Output Handle = 0x7ada40
[ODBC][5452][1714972378.492558][../../DriverManager/SQLExecDirect.c][240]
Entry:
Statement = 0x7ada40
SQL = [SELECT A.ID...][length = 1126 (SQL_NTS)]
[ODBC][5452][1714972378.511935][../../DriverManager/SQLExecDirect.c][521]
Exit:[SQL_SUCCESS]
[ODBC][5452][1714972379.648569][../../DriverManager/SQLFetch.c][162]
Entry:
Statement = 0x7ada40
[ODBC][5452][1714972379.648612][../../DriverManager/SQLFetch.c][352]
Exit:[SQL_ERROR]
[ODBC][5452][1714972379.648622][../../DriverManager/SQLGetDiagRec.c][681]
Entry:
Statement = 0x7ada40
Rec Number = 1
SQLState = 0x7fffffffccd9
Native = 0x7fffffffccd4
Message Text = 0x7fffffffcad0
Buffer Length = 512
Text Len Ptr = 0x7fffffffccd2
[ODBC][5452][1714972379.648631][../../DriverManager/SQLGetDiagRec.c][738]
Exit:[SQL_SUCCESS]
SQLState = SL009
Native = 0x7fffffffccd4 -> 0 (32 bits)
Message Text = [[unixODBC][Driver Manager]No columns were bound prior to calling SQLFetch or SQLFetchScroll]
[ODBC][5452][1714972379.648657][../../DriverManager/SQLMoreResults.c][162]
Entry:
Statement = 0x7ada40
[ODBC][5452][1714972379.651931][../../DriverManager/SQLMoreResults.c][329]
Exit:[SQL_NO_DATA]

回答 0
暂无回答
扫一扫
联系客服