求救,初学,在VC中,API通过ODBC操作数据库
程序运行结果
Connect Success!
SQLExecDirect failed! //这里说明执行SQL语句失败
Hello API ODBC!
代码如下:
#include <conio.h>
#include <stdio.h>
#include <afxwin.h>
#include <sqlext.h>
#include <sql.h>
#pragma comment(lib, "odbc32.lib")
int main(int argc, char* argv[])
{
SQLRETURN sr;
SQLHENV hEnv; //分配odbc环境
SQLHDBC hDbc;//
SQLHSTMT hStmt;//
//
SQLCHAR SqlState[6];
SQLINTEGER NativeError;
SQLCHAR ErrMsg[SQL_MAX_MESSAGE_LENGTH];
SQLCHAR szName[50];
SQLINTEGER cbName;
//
int i = 1;
char szDSN[] = "TestDB";//ODBC数据源
char szUID[] = "sa"; //SQL用户
char szAuthStr[] = ""; //口令
LPCSTR svSQL="select szName from [ApiOdbc]";
sr = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);//创建ODBC句柄,分配odbc环境
sr = SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER); //设定odbc版本
sr = SQLSetConnectAttr(hDbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)5,0); //分配odbc连接句柄
//连接
sr = SQLConnect(hDbc,(SQLCHAR *)szDSN, SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)NULL,SQL_NTS);
/*如果返回值为SQL_ERROR或SQL_SUCCESS_WITH_INFO,可以用函数SQLGetDiagRec获取相应SQLSTATE的值*/
if(sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO)
{
TRACE("ERROR");
while(SQLGetDiagRec(SQL_HANDLE_DBC,hDbc,i,SqlState, &NativeError,ErrMsg,sizeof(ErrMsg),NULL)!= SQL_NO_DATA)
TRACE("Diag : %d SQLSTATE :%s NativeError : %d ,ErrMsg : %s\n",i ++,SqlState,NativeError,ErrMsg);
}
else
printf("Connect Success!\n");
//sr = SQLAllocStmt(hDbc,&hStmt);SQLAllocStmt() 已被废弃,且替换为 SQLAllocHandle();
//直接执行SQL语句
sr=SQLExecDirect(hStmt,(SQLCHAR *)svSQL,strlen(svSQL) );//对于SQL查询语句,ODBC会返回一个光标,与光标对应的是一个结果集合(可以理解为一个表格)
if ( (sr != SQL_SUCCESS) && (sr != SQL_SUCCESS_WITH_INFO) )
{
printf("SQLExecDirect failed!\n");
}
else
{
while ((sr=SQLFetch(hStmt))!=SQL_NO_DATA)
{
//执行SQL语句后遍历结果集来得到数据
SQLGetData(hStmt, 2, SQL_C_CHAR, szName, 50, &cbName);
printf("%s\n",szName);
}
}
//断开数据库连接
sr = SQLDisconnect(hDbc);
if(hDbc != SQL_NULL_HANDLE)
SQLFreeHandle(SQL_HANDLE_DBC,hDbc);
if(hDbc != SQL_NULL_HANDLE)
SQLFreeHandle(SQL_HANDLE_ENV,hEnv);
if(hStmt!=NULL)
SQLFreeStmt( hStmt, SQL_DROP );
printf("Hello API ODBC!\n");
getch();
return 0;
}
问题点数:20、回复次数:4Top
1 楼wangyinet(卢佳宜)回复于 2006-07-01 15:59:52 得分 0
sr=SQLExecDirect(hStmt,(SQLCHAR *)svSQL,strlen(svSQL) );//对于SQL查询语句,
这句没能通过Top
2 楼wangyinet(卢佳宜)回复于 2006-07-01 16:00:50 得分 0
解决问题者加100分,拼老本了Top
3 楼wangyinet(卢佳宜)回复于 2006-07-01 16:41:15 得分 0
刚发现连接数据库是失败的
有没人帮下我啊Top
4 楼seu07201213(【_】〖汪洋中的一片叶子〗≈^︵^≈)回复于 2006-07-01 18:14:05 得分 20
你的问题已经在你发的另一贴中解决;
http://community.csdn.net/Expert/topic/4854/4854690.xml?temp=.9844629Top




