代码如下,你可以直接考过去调试
#include <conio.h>//getch()
#include <stdio.h>
#include <afxwin.h>//// MFC core and standard components
#include <sqlext.h> //包含有扩展的ODBC的定义
#include <sql.h> //包含有基本的ODBC API的定义
#pragma comment(lib, "odbc32.lib")int main(int argc, char* argv[])
{
SQLRETURN sr;
SQLHENV hEnv; //分配odbc环境
SQLHDBC hDbc;//
SQLHSTMT hStmt;//
//
SQLCHAR szName[50];
SQLINTEGER cbName;
//
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);
if(sr==SQL_SUCCESS)
{
printf("1~~创建环境句柄SQLAllocHandle Success!\n");
}
sr = SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER);
if(sr==SQL_SUCCESS)
{
printf("2~~SQLSetEnvAttr Success!\n");
}
//创建连接句柄
sr = SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc);
if(sr==SQL_SUCCESS)
{
printf("3~~创建连接句柄SQL_HANDLE_DBC Success!\n");
}
//设置连接属性
sr = SQLSetConnectAttr(hDbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)5,0);
if(sr==SQL_SUCCESS)
{
printf("4~~设置连接属性SQLSetConnectAttr Success!\n");
}
//连接
sr = SQLConnect(hDbc,(SQLCHAR *)szDSN, SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)NULL,SQL_NTS);
if(sr == SQL_SUCCESS) -----------------------------------这里不能通过上面返回都是对的
{
printf("5~~连接Connect Success!\n");
}
//分配语句句柄
sr=SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if(sr==SQL_SUCCESS)
{
printf("6~~分配语句句柄SQL_HANDLE_STMT Success!\n");
}
//执行SQL查询语句
sr=SQLExecDirect(hStmt,(UCHAR *)svSQL,SQL_NTS);
if (sr == SQL_SUCCESS)
{
printf("7~~执行SQL查询语句SQLExecDirect Success!\n");
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;
}
解决问题再加100分,拼老本啊
Email :[email protected]
#include <conio.h>//getch()
#include <stdio.h>
#include <afxwin.h>//// MFC core and standard components
#include <sqlext.h> //包含有扩展的ODBC的定义
#include <sql.h> //包含有基本的ODBC API的定义
#pragma comment(lib, "odbc32.lib")int main(int argc, char* argv[])
{
SQLRETURN sr;
SQLHENV hEnv; //分配odbc环境
SQLHDBC hDbc;//
SQLHSTMT hStmt;//
//
SQLCHAR szName[50];
SQLINTEGER cbName;
//
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);
if(sr==SQL_SUCCESS)
{
printf("1~~创建环境句柄SQLAllocHandle Success!\n");
}
sr = SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER);
if(sr==SQL_SUCCESS)
{
printf("2~~SQLSetEnvAttr Success!\n");
}
//创建连接句柄
sr = SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc);
if(sr==SQL_SUCCESS)
{
printf("3~~创建连接句柄SQL_HANDLE_DBC Success!\n");
}
//设置连接属性
sr = SQLSetConnectAttr(hDbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)5,0);
if(sr==SQL_SUCCESS)
{
printf("4~~设置连接属性SQLSetConnectAttr Success!\n");
}
//连接
sr = SQLConnect(hDbc,(SQLCHAR *)szDSN, SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)NULL,SQL_NTS);
if(sr == SQL_SUCCESS) -----------------------------------这里不能通过上面返回都是对的
{
printf("5~~连接Connect Success!\n");
}
//分配语句句柄
sr=SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if(sr==SQL_SUCCESS)
{
printf("6~~分配语句句柄SQL_HANDLE_STMT Success!\n");
}
//执行SQL查询语句
sr=SQLExecDirect(hStmt,(UCHAR *)svSQL,SQL_NTS);
if (sr == SQL_SUCCESS)
{
printf("7~~执行SQL查询语句SQLExecDirect Success!\n");
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;
}
解决问题再加100分,拼老本啊
Email :[email protected]
1.//连接
sr = SQLConnect(hDbc,(SQLCHAR *)szDSN, SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)NULL,SQL_NTS);
这里如果连接成功可以返回的是SQL_SUCCESS_WITH_INFO(General warning Driver-specific informational message,有 warning)而不并只有SQL_SUCCESS2.执行LPCSTR svSQL="select szName from [ApiOdbc]";后返回一列数据
而你
//执行SQL语句后遍历结果集来得到数据
SQLGetData(hStmt, 2, SQL_C_CHAR, szName, 50, &cbName);取第二列数据,当然取不到,
sql语句改为select * from [ApiOdbc];3.if(hStmt!=NULL)SQLFreeStmt( hStmt, SQL_DROP );
要在断开数据库sr = SQLDisconnect(hDbc); 连接前释放
#include <stdio.h>
#include <afxwin.h>//// MFC core and standard components
#include <sqlext.h> //包含有扩展的ODBC的定义
#include <sql.h> //包含有基本的ODBC API的定义
#pragma comment(lib, "odbc32.lib")int main(int argc, char* argv[])
{
SQLRETURN sr;
SQLHENV hEnv; //分配odbc环境
SQLHDBC hDbc;//
SQLHSTMT hStmt;//
//
SQLCHAR szName[50];
SQLINTEGER cbName;
//
char szDSN[] = "TestDB";//ODBC数据源
char szUID[] = "sa"; //SQL用户
char szAuthStr[] = ""; //口令
LPCSTR svSQL="select * from [ApiOdbc]";// //创建环境句柄
sr = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
if(sr==SQL_SUCCESS)
{
printf("1~~创建环境句柄SQLAllocHandle Success!\n");
}
sr = SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER);
if(sr==SQL_SUCCESS)
{
printf("2~~SQLSetEnvAttr Success!\n");
}
//创建连接句柄
sr = SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc);
if(sr==SQL_SUCCESS)
{
printf("3~~创建连接句柄SQL_HANDLE_DBC Success!\n");
}
//设置连接属性
sr = SQLSetConnectAttr(hDbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)5,0);
if(sr==SQL_SUCCESS)
{
printf("4~~设置连接属性SQLSetConnectAttr Success!\n");
}
//连接
sr = SQLConnect(hDbc,(SQLCHAR *)szDSN, SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)NULL,SQL_NTS);
if(sr == SQL_SUCCESS||sr == SQL_SUCCESS_WITH_INFO)
{
printf("5~~连接Connect Success!\n");
}
//分配语句句柄
sr=SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
if(sr==SQL_SUCCESS)
{
printf("6~~分配语句句柄SQL_HANDLE_STMT Success!\n");
}
//执行SQL查询语句
sr=SQLExecDirect(hStmt,(UCHAR *)svSQL,SQL_NTS);
if (sr == SQL_SUCCESS)
{
printf("7~~执行SQL查询语句SQLExecDirect Success!\n");
while ((sr=SQLFetch(hStmt))!=SQL_NO_DATA)
{
//执行SQL语句后遍历结果集来得到数据
SQLGetData(hStmt, 3, SQL_C_CHAR, szName, 50, &cbName);
printf("%s\n",szName);
}
} //释放
if(hStmt!=NULL)
SQLFreeStmt( hStmt, SQL_DROP );
//断开数据库连接
sr = SQLDisconnect(hDbc);
if(hDbc != SQL_NULL_HANDLE)
SQLFreeHandle(SQL_HANDLE_DBC,hDbc);
if(hDbc != SQL_NULL_HANDLE)
SQLFreeHandle(SQL_HANDLE_ENV,hEnv);
printf("Hello API ODBC!\n");
getch();
return 0;
}