c语言利用odbc连接数据库问题

断水为桥 发布于 2014/03/06 17:57
阅读 1K+
收藏 0
c

【领华为电脑包】容器化时代到来!跳转机分配问题终于“有救”了!>>>

win7系统,已建立数据源,并且test成功。接着写代码,遇到了问题,总是说连接失败。求大神指导下是什么原因。

#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<sql.h>
#include<sqlext.h>
#include<sqltypes.h>

#define Name_Len 20
#define Pwd_Len 10

SQLCHAR ID[Name_Len];
SQLCHAR PWD[Pwd_Len];

SQLINTEGER userID=SQL_NTS,userName=SQL_NTS,userPassword=SQL_NTS;


int main()
{	
	//定义句柄
	SQLHENV serverhenv;
	SQLHDBC serverhdbc;
	SQLHSTMT serverstmt;
	SQLRETURN ret;

	//初始化环境
	ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&serverhenv);
	ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,0);
	if(ret==SQL_SUCCESS)
	{
		printf("-------------------------\n");
		printf("环境分配成功\n");
		printf("-------------------------\n");
	}

	//建立连接
	ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);
	ret=SQLConnectW(serverhdbc,(SQLWCHAR *)"my_test",SQL_NTS,(SQLWCHAR*)"root",SQL_NTS,(SQLWCHAR*)"108103",SQL_NTS);
	if(!SQL_SUCCEEDED(ret))
	{
		printf("数据连接失败\n");
		return -1;
	}

	//初始化语句句柄

	ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverstmt);
	ret=SQLExecDirect(serverstmt,(SQLWCHAR*)"select * from my_test",SQL_NTS);

	//处理结果集

	ret=SQLBindCol(serverstmt,1,SQL_C_CHAR,ID,Name_Len,&userID);
	ret=SQLBindCol(serverstmt,2,SQL_C_CHAR,PWD,Pwd_Len,&userPassword);

	printf("userID\t userPassword\t\n");
	while ((ret=SQLFetch(serverstmt))!=SQL_NO_DATA_FOUND)
	{
		if(ret==SQL_ERROR)
		{
			printf("Fetch data error!\n");
		}else
		{

			printf("%s\t %s\t\n",ID,PWD);
		}
	}

	//中止处理
	SQLFreeHandle(SQL_HANDLE_STMT,serverstmt);
	SQLDisconnect(serverhdbc);
	SQLFreeHandle(SQL_HANDLE_DBC,serverhdbc);
	SQLFreeHandle(SQL_HANDLE_ENV,serverhenv);
	printf("-----------------------------\n");
	return 0;
}



单步调试显示是在
ret=SQLConnectW(serverhdbc,(SQLWCHAR *)"my_test",SQL_NTS,(SQLWCHAR*)"root",SQL_NTS,(SQLWCHAR*)"108103",SQL_NTS);



这一步出现了问题,进行了这一步之后ret变成了-1.

求大神指导是什么情况。dsn名字没有问题,用户名和密码也没有问题。


加载中
返回顶部
顶部