首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么SQLconnect返回一个SQL_ERROR,SQLGetDiagRec却没有显示任何信息?

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

提问于 2018-12-06 22:31:52
回答 2关注 0查看 1.6K

相关环境

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

系统:WIN10 32

相关代码

代码语言:javascript
复制
#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的数据源

代码语言:javascript
复制
SQLConnect(hdbc, (SQLWCHAR*)"myTest"——> myTest是一个没有在ODBC注册的数据源

代码执行的结果

Total Number of diagnostic records:1 SQLSTATE:I
Total Number of diagnostic records:1 SQLSTATE:I

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

回答

和开发者交流更多问题细节吧,去 写回答
相关文章

相似问题

相关问答用户
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档