开发者社区> 问答> 正文

为什么我故意用SQLconnect返回了一个SQL_ERROR,SQLGetDiagRec却没有显示任何信息?

相关环境

IDE:Microsoft Visual Studio Ultimate 2013 版本12.0.40629.00 Update 5

系统:WIN10 32

相关代码

#include<stdio.h> 
#include<windows.h> 
#include<sql.h> 
#include<sqlext.h> 
#include<sqltypes.h> 
#include<sqlucode.h>
#include<string>
#include<iostream>
using namespace std;

int main()
{
    SQLRETURN ret; //返回结果
    SQLHENV henv; //环境句柄
    SQLHDBC hdbc; //连接句柄
    SQLHSTMT hstmt; //语句句柄
    
        //申请环境句柄 
    ret = SQLAllocHandle(SQL_HANDLE_ENV, NULL, &henv);
        //设置环境属性 
    ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3_80, SQL_IS_INTEGER);
        //申请数据库连接句柄 
    ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
       //连接
    ret = SQLConnect(hdbc, (SQLWCHAR*)"myTest", SQL_NTS, (SQLWCHAR*)"sa", SQL_NTS, (SQLWCHAR*)"1234", SQL_NTS);
       //输出错误信息
    if (ret != SQL_SUCCESS){
            SQLINTEGER   NumRecords = 0;
                SQLGetDiagField( SQL_HANDLE_DBC, 
                                              hdbc, 
                                              0,
                                              SQL_DIAG_NUMBER,
                                              &NumRecords,
                                              SQL_IS_INTEGER,
                                              NULL );
            printf("Total Number of diagnostic records: %d\n", NumRecords);    

            SQLSMALLINT   Counter = 0;
            SQLINTEGER     NativeErr = 0;
            SQLWCHAR      SQLState[6];
            SQLWCHAR      ErrMsg[255];
            SQLSMALLINT  ErrMsgLen = 0;

            for (Counter = 1; Counter <= NumRecords; Counter++)
            {
          SQLGetDiagRec( SQL_HANDLE_DBC, 
                                              hdbc, 
                                              Counter,
                                              SQLState, 
                                              &NativeErr, 
                                              ErrMsg, 
                                              sizeof(ErrMsg),
                                              &ErrMsgLen  );
          printf("SQLSTATE : %s\n", SQLState);
          printf("%s\n", ErrMsg);
            }
    }
    return 0;
}

故意的错误在于 SQLconnect 的数据源

SQLConnect(hdbc, (SQLWCHAR*)"myTest"——> myTest是一个没有在ODBC注册的数据源

代码执行的结果
_

按照ODBC API文档的解释,这里应该会出现类似 “数据源不存在” 的错误提示,请问为什么我的代码却没有??

展开
收起
凤凰与梧桐 2018-12-06 22:20:51 3099 0
1 条回答
写回答
取消 提交回答
  • 没有捕获错误

    2019-07-17 23:18:41
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载