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