C语言连接SQL数据库

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。#includestdio.h#includestdlib.h#includestring.h#includeutil.h#includesqlca.hEXECSQLINCLUDESQLCA;(1)main(){EXECSQLBEGINDECLARESECTION;(2)charfirstname[13];charuserid[9];charpasswd[19];EXECSQLENDDECLARESECTION;EXECSQLCONNECTTOsample;(3)EXECSQLSELECTFIRSTNMEINTO:firstname(4)FROMemployeeWHERELASTNAME='JOHNSON';(4)printf(Firstname=%s\n,firstname);EXECSQLCONNECTRESET;(5)return0;}上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分:(1)中的includeSQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。(2)在BEGINDECLARESECTION和ENDDECLARESECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。(3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。(4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句。(5)最后断开数据库的连接。从上例看出,每条嵌入式SQL语句都用EXECSQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXECSQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。C语言与SQLSERVER数据库1.使用C语言来操作SQLSERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。step1:启动SQLSERVER服务,例如:HNHJ,开始菜单-运行-netstartmssqlserverstep2:打开企业管理器,建立数据库test,在test库中建立test表(avarchar(200),bvarchar(200))step3:建立系统DSN,开始菜单-运行-odbcad32,添加-SQLSERVER名称:csql,服务器:HNHJ使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码:更改默认的数据库为:test...测试数据源,测试成功,即DNS添加成功。2.cpp文件完整代码//##########################save.cpp##########################C代码1.#includestdio.h2.#includestring.h3.#includewindows.h4.#includesql.h5.#includesqlext.h6.#includesqltypes.h7.#includeodbcss.h8.9.SQLHENVhenv=SQL_NULL_HENV;10.SQLHDBChdbc1=SQL_NULL_HDBC;11.SQLHSTMThstmt1=SQL_NULL_HSTMT;12.13./*14.cpp文件功能说明:15.1.数据库操作中的添加,修改,删除,主要体现在SQL语句上16.2.采用直接执行方式和参数预编译执行方式两种17.*/18.intmain(){19.RETCODEretcode;20.UCHARszDSN[SQL_MAX_DSN_LENGTH+1]=csql,21.szUID[MAXNAME]=sa,22.szAuthStr[MAXNAME]=;23.//SQL语句24.//直接SQL语句25.UCHARsql[37]=insertintotestvalues('aaa','100');26.//预编译SQL语句27.UCHARpre_sql[29]=insertintotestvalues(?,?);28.//1.连接数据源29.//1.环境句柄30.retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);31.retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,32.(SQLPOINTER)SQL_OV_ODBC3,33.SQL_IS_INTEGER);34.//2.连接句柄35.retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1);36.retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,0);37.//判断连接是否成功38.if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO)){39.printf(连接失败!\n);40.}else{41.//2.创建并执行一条或多条SQL语句42./*43.1.分配一个语句句柄(statementhandle)44.2.创建SQL语句45.3.执行语句46.4.销毁语句47.*/48.retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);49.//第一种方式50.//直接执行51.//添加操作52.//SQLExecDirect(hstmt1,sql,37);53.54.//第二种方式55.//绑定参数方式56.chara[200]=bbb;57.charb[200]=200;58.SQLINTEGERp=SQL_NTS;59.//1预编译60.SQLPrepare(hstmt1,pre_sql,29);//第三个参数与数组大小相同,而不是数据库列相同61.//2绑定参数值62.SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);63.SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);64.//3执行65.SQLExecute(hstmt1);66.67.printf(操作成功!);68.//释放语句句柄69.SQLCloseCursor(hstmt1);70.SQLFreeHandle(SQL_HANDLE_STMT,hstmt1);71.72.}73.//3.断开数据源74./*75.1.断开与数据源的连接.76.2.释放连接句柄.77.3.释放环境句柄(如果不再需要在这个环境中作更多连接)78.*/79.SQLDisconnect(hdbc1);80.SQLFreeHandle(SQL_HANDLE_DBC,hdbc1);81.SQLFreeHandle(SQL_HANDLE_ENV,henv);82.return(0);83.}//##########################list.cpp##########################C代码1.#includestdio.h2.#includestring.h3.#includewindows.h4.#includesql.h5.#includesqlext.h6.#includesqltypes.h7.#includeodbcss.h8.9.SQLHENVhenv=SQL_NULL_HENV;10.SQLHDBChdbc1=SQL_NULL_HDBC;11.SQLHSTMThstmt1=SQL_NULL_HSTMT;12.13./*14.查询SQLSERVER数据库,1.条件查询,2.直接查询全部15.*/16.intmain(){17.RETCODEretcode;18.UCHARszDSN[SQL_MAX_DSN_LENGTH+1]=csql,19.szUID[MAXNAME]=sa,20.szAuthStr[MAXNAME]=;21.UCHARsql1[39]=selectbfromtestwherea='aaa';22.UCHARsql2[35]=selectbfromtestwherea=?;23.UCHARsql3[19]=selectbfromtest;24.25.retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);26.retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,27.(SQLPOINTER)SQL_OV_ODBC3,28.SQL_IS_INTEGER);29.retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1);30.//1.连接数据源31.retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,0);32.if((retcode!=SQL_SUCCESS)&&(retcode!=SQL_SUCCESS_WITH_INFO)){33.printf(连接失败!);34.}else{35.//2.创建并执行一条或多条SQL语句36./*37.1.分配一个语句句柄(statementhandle)38.2.创建SQL语句39.3.执行语句40.4.销毁语句41.*/42.retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1);43.//第一种方式44./*45.//直接执行46.SQLExecDirect(hstmt1,sql1,39);47.charlist[5];48.SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0);49.SQLFetch(hstmt1);50.printf(%s\n,list);51.*/52.53.//第二种方式54./*55.//绑定参数方式56.chara[200]=aaa;57.SQLINTEGERp=SQL_NTS;58.//1.预编译59.SQLPrepare(hstmt1,sql2,35);//第三个参数与数组大小相同,而不是数据库列相同60.//2.绑定参数值61.SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);62.//3.执行63.SQLExecute(hstmt1);64.charlist[5];65.SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0);66.SQLFetch(hstmt1);67.printf(%s\n,list);68.*/69.70.//第三种方式全部输出71./*72.1.确认一个结果集是否可用。73.2.将结果集的列绑定在适当的变量上。74.3.取得行75.*/76.//3.检查结果记录(如果有的话)77.SQLExecDirect(hstmt1,sql3,19);78.charlist[5];79.SQLBind

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功