如题,书本上一段C语言示例程序,64位计算机codeblocks下连接到了libodbc32.lib、libodbccp32.lib库文件,但运行中无法进入成功连接数据库的while循环,也找不到建立的MYDB数据库和student.mdb文件。小弟是新手刚入门想了解一下数据库,没想到被这个小示例绊住了半天,极其沮丧——求助大家,指点迷津
代码如下:
[code=c]#include
#include
#include
#include
#include
#include
const char szDriver[]="Microsoft Access Driver(*.mdb)";
const char szAttributes[]="DSN=MYDS\0DBQ=student.mdb;";
void doSelect(HDBC hDBC)
{
SQLCHAR sid[15],sname[100],sex[5],cname[10];
SQLINTEGER qmath,qcpp,size;
HSTMT hSTMT;
SQLAllocHandle(SQL_HANDLE_STMT,hDBC,&hSTMT);
SQLExecDirect(hSTMT,(SQLCHAR*)"SELECT * FROM student",SQL_NTS);
printf("学号\t姓名\t性别\t班级\t数学成绩\tC语言成绩\n");
while(SQLFetch(hSTMT)==SQL_SUCCESS)
{
printf("Succeed!!\n"); //这里就到不了
SQLGetData(hSTMT,1,SQL_C_CHAR,sid,sizeof(sid),&size);
SQLGetData(hSTMT,2,SQL_C_CHAR,sname,sizeof(sname),&size);
SQLGetData(hSTMT,3,SQL_C_CHAR,sex,sizeof(sex),&size);
SQLGetData(hSTMT,4,SQL_C_CHAR,cname,sizeof(cname),&size);
SQLGetData(hSTMT,5,SQL_C_CHAR,&qmath,sizeof(qmath),&size);
SQLGetData(hSTMT,6,SQL_C_CHAR,&qcpp,sizeof(qcpp),&size);
printf("%s\t%s\t%s\t%s\t%d\t%d\t\n",sid,sname,sex,cname,qmath,qcpp);
}
SQLFreeHandle(SQL_HANDLE_STMT,hSTMT);
}
void doSQL(HDBC hDBC,char * szSQLStatement)
{
HSTMT hSTMT;
SQLAllocHandle(SQL_HANDLE_STMT,hDBC,&hSTMT);
SQLExecDirect(hSTMT,(SQLCHAR *)szSQLStatement,SQL_NTS);
SQLFreeHandle(SQL_HANDLE_STMT,hSTMT);
}
int main()
{
HENV hENV;
HDBC hDBC;
char buf[300];
SQLAllocHandle(SQL_HANDLE_ENV,NULL,&hENV);
SQLSetEnvAttr(hENV,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
SQLAllocHandle(SQL_HANDLE_DBC,hENV,&hDBC);
SQLConfigDataSource(NULL,ODBC_ADD_DSN,szDriver,szAttributes);
SQLConnect(hDBC,(SQLCHAR*)"MYDS",SQL_NTS,NULL,0,NULL,0);
doSelect(hDBC);
srand((unsigned)time(NULL));
sprintf(buf,"UPDATE student SET qmath=%d WHERE sname=\'李三\'",rand()%100);
doSQL(hDBC,buf);
doSQL(hDBC,"DELETE FORM student WHERE sid=\'2006301204\'");
doSelect(hDBC);
doSQL(hDBC,"INSERT INTO student VALUES(\'2000301204\',\'王二\',\'男\',"
"\'10030601\',80,90)");
SQLEndTran(SQL_HANDLE_DBC,hDBC,SQL_COMMIT);
SQLDisconnect(hDBC);
SQLFreeHandle(SQL_HANDLE_DBC,hDBC);
SQLFreeHandle(SQL_HANDLE_ENV,hENV);
return 0;
}[/code]