所在的位置: 数据库 >> 培训学校 >> C语言与数据库

C语言与数据库

数据库,DataBase,学C语言的是不是想说,很想爱她却并不容易呢?不用着急,C语言也可以操作数据库的,既使你不会WindowsAPI,只要参照本文的方法,写数据库应用程序,你也行。本文以MySql和Access数据库为基础,简要介绍C语言如何操作数据库,本文部分知识点也适用于linux下面编程使用MySql数据库。

一、如果你只会一点C语言,那么还有哪些知识需要你自己去补充呢?

(1)了解一下数据库的基本情况,发展史,很有必要,选用一种数据库,数据库有很多,开源数据库据说多达35个,常用的数据库也有如下几个:MySQL、PostgreSQL、MaxDB、Ingres、SQLite。这些大部分都是免费开源的数据库,都需要你去下载安装的,微软还有收费的MSSQL,Access数据库可以使用,当然,对于大多数中国用户来说,MSSQL,Access免费使用,本文以MySql和Access数据库为例,示例C语言如何操作数据库。关于Access数据库,安装过office的基本上都有,如果不会使用它创建mdb数据库的话,请到   I.连接资料来源(ConnectingtoaDataSource)1.SQLAllocEnv.   2.SQLAllocConnect.3.SQLConnect.   4.SQLPriverConnect.5.SQLBrowseConnect.   II.取得驱动程序及资料来源的相关讯息   1.SQLDataSource.   2.SQLGetInfo.   3.SQLGetFunctions.   4.SQLGetTypeInfo.   III.设定及取得驱动程序的选项1.SQLSetConnectOption.2.SQLGetConnectOption.3.SQLSetStmtOption.4.SQLGetStmtOption.   IV.准备SQL指令之需求   1.SQLAllocStmt.2.SQLPrepare.3.SQLSetParam.4.SQLParamOptions.5.SQLGetCursorName.6.SQLSetCursorName.7.SQLSetScrollOptions.   V.传送及执行需求   1.SQLExecute.2.SQLExecDirect.3.SQLNativeSql.4.SQLDescribeParanl.5.SQLNumParams.6.SQLParamData.7.SQLPutData.   VI.取得执行结果及有关结果的讯息1.SQLRowCount.2.SQLNumResultCols.3.SQLDescribeCol.4.SQLColAttributes.5.SQLBindCol.6.SQLFetch.7.SQLExtendedFetch.8.SQLGetData.9.SQLSetDos.10.SQLMoreResults.11.SQLError.   VII.取得有关资料来源系统回录(SystemtablesorCatalog)的讯息1.SQLColumnPrivileges.2.SQLColumns.3.SQLForeignkeys.4.SQLPrimaryKeys.5.SQLProcedureColumns.6.SQLProcedures.7.SQLSpecialColumns.8.SQLStatistics.9.SQLTablePrivileges.10.SQLTables.VIII.结束SQL指令需求1.SQLFreeStmt.2.SQLCancel.3.SQLTransact.   IX.结束与资料来源的连接   1.SQLDisconnect.2.SQLFreeConnect.3.SQLFreeEnv.

API学习的方法,和我们学习C语言的库函数没什么两样,准备好msdn,或是通过网络搜索功能,你可以查找到每个Api函数的使用,同时也可以学习msdn上面微软写的示例代码。这些API都是以SQL打头的函数,规范的函数命名也值得你我学习,看着很多,但本文不打算全部都用上,只用其中很少量的函数,所以不要害怕,需要其它功能的时候,有这个表格,也可以方便你查找函数使用。

四、SQL数据类型和C语言数据类型。

SQL_C_CHAR是默认的ODBC传输类型,其它数据类型请参见手册中的ODBC数据类型(26章1.17节那里),不重述了。这一章里面还有关于Access数据库与Mysql数据库数据导入方法,用SELECTLAST_INSERT_ID();取得auto_increment值,以及ODBC应用基本步骤、API引用,及调用错误代码含义,初学时可以翻翻这些地方,说不定你的问题就在上面就解决了。

五、操作过程。

ODBC操作步子如下:

·配置MyODBCDSN。(这一步不是必须的,可以直接连接)

·连接到MySQL服务器或是Access数据库。

·初始化操作。

·执行SQL语句。

·检索结果。(Select语句返回结果集,update/delete/insert返回受影响的行数)

·执行事务。

·断开与服务器的连接。

图解见手册26.1.15节。这个操作步子在Java桥连里是一样的,使用的是jdbc:odbc:数据源名,JavaScript也是同样的步子,偶以前写过网页JavaScript操作access数据库,所以一通百通。为了更好的理解数据库操作,我们采用传统的控制台界面来示例,其实做windows界面版的,基本数据库操作和这个控制台的一样,没什么两样,抛开界面,更有利于我们看到问题的实质。

C示例代码,操作PersonAL.mdb库。

#includestdio.h#includestdlib.h#includewindows.h#includesqlext.h//这个应该是必须的,链结时需要odbc32.libintmain(){SQLHENVhenv=NULL;//环境句柄SQLHDBChdbc=NULL;//odbc连接句柄SQLHSTMThstmt=NULL;//语句句柄SQLRETURNretcode;SQLCHARconnout[];SQLSMALLINTconnout_len;SQLCHARconnstr[]="Driver={MicrosoftAccessDriver(*.mdb)};Dbq=PersonAL.mdb;Uid=Admin;Pwd=;CharSet=gbk;";//分配环境retcode=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,henv);//设置环境属性retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);//分配链结retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,hdbc);//创建数据库链结retcode=SQLDriverConnect(hdbc,NULL,connstr,SQL_NTS,connout,sizeof(connout),connout_len,SQL_DRIVER_NOPROMPT);if(retcode==SQL_SUCCESS

retcode==SQL_SUCCESS_WITH_INFO){printf("connnectaccessok!\n");printf("%s\n",connout);retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,hstmt);retcode=SQLPrepare(hstmt,(SQLCHAR*)"select*fromuser",SQL_NTS);//准备sql查询retcode=SQLExecute(hstmt);//执行SQL命令SQLINTEGERcbsatid=SQL_NTS;while(SQLFetch(hstmt)!=SQL_NO_DATA_FOUND)//循环从结果集中取每一行数据{SQLCHARname[20];SQLCHARpass[20];SQLINTEGERid;//实际上数字也可以用C_CHAR读出来。SQLGetData(hstmt,1,SQL_C_LONG,id,sizeof(SQLINTEGER),cbsatid);//name为接收数据的指针,20为数据缓冲区的大小,SQLGetData(hstmt,2,SQL_C_CHAR,name,20,cbsatid);SQLGetData(hstmt,3,SQL_C_CHAR,pass,20,cbsatid);printf("idis:%ld,nameis:%s,passis:%s\n",id,name,pass);//打印取得的值}if(hstmt){SQLFreeHandle(SQL_HANDLE_STMT,hstmt);//释放语句句柄hstmt=NULL;}if(hdbc){SQLDisconnect(hdbc);//断开连接SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//释放连接句柄hdbc=NULL;}if(henv){SQLFreeHandle(SQL_HANDLE_ENV,henv);//释放环境句柄henv=NULL;}}return0;}

程序编译说明,vc6下面,odbc32.lib默认是连接库,所以上述程序直接编译连接通过,生成执行文件。数据库放在工程项目中,既可显示正确的数据,如果是在debug/Release目录下执行,把数据库拷到当前exe目录下执行既可。如果是使用的codeblocks,请在菜单project(工程)/BuildOption(生成选项)中,在LinkerSetting(链结设置)点add(添加),输入odbc32,确定,既可使程序链结上odbc32运行库。在codeblocks中,用debug方式生成的exe,35KB左右,如果你选择Release方式生成可执行文件,才9.5KB,是不是很小很爽呢?有下图为证:(如果你不会使用codeblocks,可参考偶写的另一帖:







































白癜风哪家医院比较好
北京中科医院好不好



转载请注明:http://www.xcqg58.com/pxxx/9335.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了