- 论坛徽章:
- 0
|
最近写了一个通过ODBC 访问informix 的程序, 执行语句的时候发现程序直接退出, 并造成informix 数据库 down 了
并在程序目录下产生了一些文件 如 B8e17934 B8e17780 之类
程序在参数准备完成, 最后一次调用SQLParamData时, 收到一个SIGSEGV信号..
我绑定的两个参数类型是SQL_LONGVARBINARY (BLOB) 和 SQL_LONGVARCHAR(CLOB)
请各位大侠帮忙.
执行的代码如下:
int Execute(TCursor *prs)
{
SQLRETURN rc;
IFXLobLocator *locp;
/* execute the statement */
rc = SQLExecute(prs->hstmt);
if (CheckErr(SQL_HANDLE_STMT, prs->hstmt, rc) != 0)
{
printf("SQLExecute Error -- %s\n", DBGetLastError());
return -1;
}
if (rc == SQL_NEED_DATA)
{
rc = SQLParamData(prs->hstmt, (SQLPOINTER *)&locp);
if (CheckErr(SQL_HANDLE_STMT, prs->hstmt, rc) != 0)
{
printf("SQLParamData Error -- %s\n", DBGetLastError());
SQLCancel(prs->hstmt);
return -1;
}
while (rc == SQL_NEED_DATA)
{
if (locp->lobp == NULL || locp->loblen == 0)
rc = SQLPutData(prs->hstmt, locp->lobp, SQL_NULL_DATA);
else
rc = SQLPutData(prs->hstmt, locp->lobp, locp->loblen);
if (CheckErr(SQL_HANDLE_STMT, prs->hstmt, rc) != 0)
{
printf("SQLPutData Error -- %s\n", DBGetLastError());
SQLCancel(prs->hstmt);
return -1;
}
rc = SQLParamData(prs->hstmt, (SQLPOINTER *)&locp);
if (CheckErr(SQL_HANDLE_STMT, prs->hstmt, rc) != 0)
{
printf("SQLParamData Error -- %s\n", DBGetLastError());
SQLCancel(prs->hstmt);
return -1;
}
}
}
return 0;
} |
|