SELECT FIRSTNME INTO :firstname (4)FROM employeeWHERE LASTNAME = 'JOHNSON';(4)printf( "First name = %s\n", firstname );EXEC SQL CONNECT RESET; (5)return 0;}上面是一个简单的静态嵌入SQL语句的应用程序。
它包括了嵌入SQL的主要部分:(1)中的include SQLCA语句定义并描述了SQLCA的结构。
SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。
(2)在BEGIN DECLARE SECTION和END DECLARE SECTION之间定义了宿主变量。
宿主变量可被SQL语句引用,也可以被C语言语句引用。
它用于将程序中的数据通过SQL语句传给数据库管理器,或从数据库管理器接收查询的结果。
在SQL语句中,主变量前均有“:”标志以示区别。
(3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。
这时,应该保证数据库实例已经启动。
(4)是一条选择语句。
它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在 firstname变量中。
该语句返回一个结果。
可以通过游标返回多个结果。
当然,也可以包含update、insert和delete语句。
(5)最后断开数据库的连接。
从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。
这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。
如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“\”。
c语言用vc连接sql server 20002009/11/02 09:34 [sql server]1.提取单条记录db";值比较db";示表格db";etLength()*15;pList->InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth);}int i=0;_bstr_t vCol;用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。
step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserverstep2:打开企业管理器,建立数据库test,在test库中建立test表(a varchar(200),b varchar(200))step3:建立系统DSN,开始菜单 ->运行 ->odbcad32,添加->SQL SERVER名称:csql,服务器:HNHJ使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码: 更改默认的数据库为:test...测试数据源,测试成功,即DNS添加成功。
文件完整代码1.据库操作中的添加,修改,删除,主要体现在SQL语句上2. 2.采用直接执行方式和参数预编译执行方式两种3.*/4.int main(){5.RETCODE retcode;6.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",7.szUID[MAXNAME] = "sa",8.szAuthStr[MAXNAME] = "";9.接数据源10.境句柄11.retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);12.retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,13.(SQLPOINTER)SQL_OV_ODBC3,14.SQL_IS_INTEGER);15.接句柄16.retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv,&hdbc1);17.retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);18.建并执行一条或多条SQL语句19./*20. 1.分配一个语句句柄(statement handle)21. 2.创建SQL语句22. 3.执行语句23. 4.销毁语句24.*/25.retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1, &hstmt1);26.开数据源27./*28. 1.断开与数据源的连接.29. 2.释放连接句柄.30. 3.释放环境句柄(如果不再需要在这个环境中作更多连接)31.*/32.SQLDisconnect(hdbc1);33.SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);34.SQLFreeHandle(SQL_HANDLE_ENV, henv);35.return(0);36.}1.件查询,2.直接查询全部2.*/3.int main(){4.RETCODE retcode;5.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",6.szUID[MAXNAME] = "sa",7.szAuthStr[MAXNAME] = "";8.UCHAR sql1[39] = "select b from test where a = 'aaa'";9.UCHAR sql2[35] = "select b from test where a = ?";10.UCHAR sql3[19] = "select b from test";11.12.retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);13.retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,14.(SQLPOINTER)SQL_OV_ODBC3,15.SQL_IS_INTEGER);16.retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv,&hdbc1);17.接数据源18.retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0);19.if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) {20.printf("连接失败!");21.} else {22.建并执行一条或多条SQL语句23./*24. 1.分配一个语句句柄(statement handle)25. 2.创建SQL语句26. 3.执行语句27. 4.销毁语句28.*/29.retcode = SQLAllocHandle(SQL_HANDLE_STMT,hdbc1, &hstmt1);30.编译31.SQLPrepare(hstmt1,sql2,35); 定参数值32.SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);33.行34.SQLExecute(hstmt1);35.char list[5];36.SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);37.SQLFetch(hstmt1);38.printf("%s\n",list);39.*/40.41.认一个结果集是否可用。
42. 2.将结果集的列绑定在适当的变量上。
43. 3.取得行44.*/45.查结果记录(如果有的话)46.SQLExecDirect (hstmt1,sql3,19);47.char list[5];48.SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);49.do{50.retcode = SQLFetch(hstmt1);51.if(retcode == SQL_NO_DATA){52.break;53.}54.printf("%s\n",list);55.}while(1);56.57.开数据源58./*59. 1.断开与数据源的连接.60. 2.释放连接句柄.61. 3.释放环境句柄(如果不再需要在这个环境中作更多连接)62.*/63.SQLDisconnect(hdbc1);64.SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);65.SQLFreeHandle(SQL_HANDLE_ENV, henv);66.return(0);67.}创建数据源的过程代码:#include<>#inlcude<>#include<>#include<>#include<>#include<>#define SNO_LEN 30#define NAME_LEN 50#define DEPART_LEN 100#define SSEX_LEN 5int main(){/*Step 1 定义句柄和变量 *///以king开头的表示的是连接KingbaseES的变量//以server开头的表示的是连接SQLSERVER的变量SQLHENV kinghenv,serverhenv;SQLHDBC kinghdbc,serverhdbc;SQLHSTMT kinghstmt,serverhstmt;SQLRETURN ret;SQLCHAR sName[NAME_LEN],sDepart[DEPART_LEN],sSex[SSEX_LEN],sSno[SNO_LEN];SQLINTEGER sAge;SQLINTEGRR cbAge=0,cbSno=SQL_NTS,cbSex=SQL_NTS,cbName=SQL_NTS,cbDepart=SQL_NTS;/*Step 2 初始化环境*/ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&kinghenv);ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&setverhenv);ret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0); /*Step 3 建立连接*/ret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,&kinghdbc);ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,&serverhdbc);ret=SQLConnect(kinghdbc,"KingbaseES ODBC",SQL_NTS,"SYSTEM",SQL_NTS,"MANAGER",SQL_NTS);if(!SQL_SUCCEEDED(ret))return -1; //连接失败时返回错误值;ret=SQLConnect(serverhdbc,"SQLServer",SQL_NTS,"sa",SQL_NTS,"sa",SQL_NTS);if(!SQL_SUCCEEDED(ret))return -1; //连接失败时返回错误值;/*Step 4 初始化语句句柄*/ret=SQLAllocHandle(SQL_HANDLE_STMT,kinghdbc,&kinghstmt);ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE(SQLPOINTER) SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);ret=SQLAllocHandle(SQL_HANDLE_STMT,serverhdbc,&serverhstmt);/*Step 5 两种方式执行语句*//*预编译带有参数的语句*/ret=SQLPrepare(sercerhstmt,"INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)VALUES(?,?,?,?,?)",SQL_NTS);if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO){ret=SQLBindParameter(serverhstmt,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SNO_LEN,0,sSno,0,&cbSNO); ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SNAME_LEN,0,sName,0,&cbNam e);ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2,0,sSex,0,&cbSex);ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,&sAge,0,&cbAge);ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbD epart);}/*执行SQL语句*/ret=SQLExecDirect(kinghstmt,"SELECT * FROM STUDENT",SQL_NTS);if(ret==SQL_SUCCESS||ret==SQL_SUCCESS_WITH_INFO){ret=SQLBindCol(kinghstmt,1,SQL_C_CHAR,sSno,SNO_LEN,&cbSno);ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,&cbName);ret=SQLBindCol(kinghstmt,3,SQL_C_CHAR,sSex,SSEX_LEN,&cbSex);ret=SQLBindCol(kinghstmt,4,SQL_C_LONG,&sAge,0,&cbAge);ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,&cbDepart);}/*Step 6 处理结果集并执行预编译后的语句*/while((ret=SQLFetch(kinghstmt))!=SQL_NO_DATA_FOUND){if(ret==SQL_ERROR) printf("Fetch error\n");else ret=SQLExecute(serverhstmt);}/*Step 7 中止处理*/SQLFreeHandle(SQL_HANDLE_STMT,kinghstmt);SQLDisconnect(kinghdbc);SQLFreeHandle(SQL_HANDLE_DBC,kinghdbc);SQLFreeHandle(SQL_HANDLE_ENV,kinghenv);SQLFreeHandle(SQL_HANDLE_STMT,serverhstmt);SQLDisconnect(serverhdbc); SQLFreeHanlde(SQL_HANDLE_DBC<serverhdbc); SQLFreeHanlde(SQL_HANDLE_ENV,serverhenv); return 0;}。