dalemwi 2016-07-07 14:29 采纳率: 0%
浏览 1135

C数据库简单程序求助,一直连接不到数据库

如题,书本上一段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]

  • 写回答

1条回答 默认 最新

  • threenewbee 2016-07-07 22:53
    关注
     const char szAttributes[]="DSN=MYDS\0DBQ=student.mdb;";
    你这里使用了dsn,在你的odbc里有没有配置数据源?另外你字符串怎么有\0,那你后面的内容都相当于不存在了。是\\ODBQ么,检查下。
    
    评论

报告相同问题?

悬赏问题

  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画