1.配置ODBC数据源
Win10系统下 编译器:codeblocks 数据库:mysql
连接数据库前需要先配置odbc。
1)安装MySQL的ODBC驱动程序
一般电脑上都会自带ODBC驱动程序,Win10系统下可以打开智能搜索,查看电脑上是否有odbc如果电脑上没有,附上odbc32驱动程序下载地址。
驱动程序下载地址https://dev.mysql.com/downloads/connector/odbc/。
2)添加ODBC数据源
1.打开文件:C:\Windows\SysWOW64\odbcad32.exe
2.点击添加,选择MySQL ODBC驱动程序,用户名和密码填写数据库的登录名和密码,数据源名自己自己随意起,点击测试,查看是否连接成功。
3.Codeblocks IDE执行环境配置
codeblocks需要链接如下的odbc32.dll文件才可以编译通过ODBC编程的各种函数。确保电脑里存在这个文件,否则网上下载。
4. 示例程序
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<sqltypes.h>#define SNO_LEN 30#define NAME_LEN 50#define SEX_LEN 5#define BIRTH_LEN 15#define SDEPT_LEN 20//插入操作int Insert(){SQLRETURN ret;SQLHENV henv; //SQLHENV henvSQLHDBC hdbc; //SQLHDBC hdbcSQLHSTMT hstmt; //SQLHSTMT hstmtret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); //申请环境句柄ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); //设置环境属性SQLCHAR sno[SNO_LEN],name[NAME_LEN],sex[SEX_LEN],age[BIRTH_LEN],sdept[SDEPT_LEN];SQLINTEGER cbsno=SQL_NTS,cbname=SQL_NTS,cbsex=SQL_NTS,cbage=SQL_NTS,cbsdept=SQL_NTS;ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); //申请连接数据库ret=SQLConnect(hdbc(SQLCHAR*)"test1",SQL_NTS(SQLCHAR*)"root",SQL_NTS(SQLCHAR*)"190301",SQL_NTS);if(!SQL_SUCCEEDED(ret)){return -1;}else{ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);ret=SQLExecDirect(hstmt,(SQLCHAR*)"INSERT INTO student VALUES (1,2,3,4,5);",SQL_NTS);ret=SQLBindParameter(hstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SNO_LEN,0,sno,0,&cbsno);ret=SQLBindParameter(hstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,NAME_LEN,0,name,20,&cbname); ret=SQLBindParameter(hstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SEX_LEN,0,sex,10,&cbsex); ret=SQLBindParameter(hstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_CHAR,BIRTH_LEN,0,age,0,&cbage); ret=SQLBindParameter(hstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SDEPT_LEN,0,sdept,20,&cbsdept);ret=SQLExecute(hstmt);printf("添加信息成功!\n");}SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_STMT,hstmt);SQLFreeHandle(SQL_HANDLE_DBC,hdbc);SQLFreeHandle(SQL_HANDLE_ENV,henv);}//显示int show(){SQLRETURN ret;SQLHENV henv; //SQLHENV henvSQLHDBC hdbc; //SQLHDBC hdbcSQLHSTMT hstmt; //SQLHSTMT hstmtSQLCHAR sno[SNO_LEN],name[NAME_LEN],sex[SEX_LEN],age[BIRTH_LEN],sdept[SDEPT_LEN];SQLINTEGER cbsno=SQL_NTS,cbname=SQL_NTS,cbsex=SQL_NTS,cbage=SQL_NTS,cbsdept=SQL_NTS;ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); //申请环境句柄ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); //设置环境属性ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc); //申请连接数据库ret=SQLConnect(hdbc,(SQLCHAR*)"test1",SQL_NTS,(SQLCHAR*)"root",SQL_NTS,(SQLCHAR*)"190301",SQL_NTS);if(!SQL_SUCCEEDED(ret)){return -1;}else{ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); //申请SQL语句句柄SQLExecDirect(hstmt,(SQLCHAR*)"SELECT *FROM student ",SQL_NTS); //执行sql语句SQLBindCol(hstmt,1, SQL_C_CHAR, sno,SNO_LEN, &cbsno);SQLBindCol(hstmt,2, SQL_C_CHAR, name,NAME_LEN, &cbname);SQLBindCol(hstmt,3, SQL_C_CHAR, sex,SEX_LEN,&cbsex);SQLBindCol(hstmt,4, SQL_C_CHAR, age,BIRTH_LEN, &cbage);SQLBindCol(hstmt,5, SQL_C_CHAR, sdept,SDEPT_LEN,&cbsdept);printf("————————学生信息表——————————\n");printf("学号 姓名 性别 年龄 所在系\n");while((ret=SQLFetch(hstmt))!=SQL_NO_DATA_FOUND){if(ret==SQL_ERROR)printf("fetch error\n");else{printf("%s %s %s %s %s\n",sno,name,sex,age,sdept);}}}SQLCloseCursor (hstmt);//释放语句句柄SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//断开数据库连接SQLDisconnect(hdbc);//释放连接句柄QLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放环境句柄句柄SQLFreeHandle(SQL_HANDLE_ENV,henv);return 0;}int main(){int select;while(1){printf("欢迎来到学生信息管理系统\n");printf("1. 显示学生信息\n");printf("2. 插入学生信息\n");printf("3. 删除学生信息\n");printf("4. 退出\n");printf("\n");printf("请输入你的操作:\n");scanf("%d",&select);switch(select){case 1: show();printf("\n");break;case 2:Insert();printf("\n");break;case 4:exit(0);break;}}}
上面的插入功能不是很完善,只能通过修改ret=SQLExecDirect(hstmt,(SQLCHAR*)“INSERT INTO student VALUES (1,2,3,4,5);”,SQL_NTS);这条语句当中的VALUES的值进行第二次插入。
我是个新手,第一次发博客,希望能对大家有帮助。