相关环境
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文档的解释,这里应该会出现类似 “数据源不存在” 的错误提示,请问为什么我的代码却没有??
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。