【发布时间】:2015-03-02 15:03:37
【问题描述】:
我正在开发一个应用程序,如果给出了这个特定的错误消息,它会被忽略:
[Oracle][ODBC][Ora]ORA-24338: 语句句柄未执行
我的比较代码如下:
char Sqlstate[10];
long NativeErrorPtr;
char MessageText[1024];
long BufferLength=1024;
long TextLengthPtr;
SQLGetDiagRec(SQL_HANDLE_STMT,sqlc.g_hstmt,1,(SQLCHAR *) Sqlstate,(SQLINTEGER *) &NativeErrorPtr,
(SQLCHAR *) MessageText,(SQLSMALLINT) BufferLength,(SQLSMALLINT *) &TextLengthPtr);
success=false;
char* msg = MessageText;
char* oracleMsg = "[Oracle][ODBC][Ora]ORA-24338: statement handle not executed";
int i = strcmp(msg, oracleMsg);
我收到i ==1。当我将鼠标悬停在msg 和oracleMsg 上时,它们看起来完全一样。这是每个变量的复制文本。
oracleMsg 0x00c1cd88 "[Oracle][ODBC][Ora]ORA-24338: 语句句柄未执行" char *
msg 0x0132d0a4 "[Oracle][ODBC][Ora]ORA-24338: 语句句柄未执行" char *
【问题讨论】:
-
可能错误消息不是以 NULL 结尾的。
msg[TextLengthPtr] = 0;. -
当我尝试添加该代码时,我得到未处理的异常“访问冲突写入位置 0xcd81cf88”。
-
尝试使用 strncmp 代替
-
请编辑您的问题并包含声明和初始化 SQLGetDiagRec 调用中使用的变量的代码,尤其是 MessageText、BufferLength 和 TextLengthPtr。谢谢。
-
好的。我已经编辑了帖子以包含变量的初始化。
标签: c++ sql oracle oracle11g string-comparison