连接到SAMPLE数据库,查询LASTNAME为JOHNSON得FIRSTNAME信息。
#include <stdio、h>#include <stdlib、h>#include <string、h>ﻫ #include "util、h"#include <sqlca、h> ﻫEXECSQL INCLUDE SQLCA; (1)main() ﻫ{ ﻫ EXEC SQL BEGIN DECLARE SECTION; (2)char firstname[13]; ﻫ char userid[9];ﻫ char passwd[19];EXEC SQL END DECLARE SECTION; ﻫ EXEC SQLCONNECT TO sample; (3)EXEC SQL SELECT FIRSTNME INTO :firstname (4)FROM employee ﻫWHERE LASTNAME = 'JOHNSON';(4)printf( "First name = %s\n", firstname );EXEC SQLCONNECT RESET; (5)ﻫ return0;}ﻫ上面就是一个简单得静态嵌入SQL语句得应用程序。
它包括了嵌入SQL得主要部分:(1)中得include SQLCA语句定义并描述了SQLCA得结构。
SQLCA 用于应用程序与数据库之间得通讯,其中得SQLCODE返回SQL语句执行后得结果状态。
ﻫ (2)在BEGINDECLARE 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语言与SQL SERVER数据库1、使用C语言来操作SQLSERVER数据库,采用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添加成功。
2、cpp文件完整代码//##########################save、cpp##########################C代码1.#include<stdio、h>2.#include <string、h>3.#include <windows、h>4.#include <sql、h>5.#include <sqlext、h>6.#include <sqltypes、h>7.#include <odbcss、h>8.9.SQLHENV henv = SQL_NULL_HENV;10.SQLHDBC hdbc1 = SQL_NULL_HDBC;11.SQLHSTMT hstmt1 =SQL_NULL_HSTMT;12.13./*14. cpp文件功能说明:15. 1、数据库操作中得添加,修改,删除,主要体现在SQL语句上16. 2、采用直接执行方式与参数预编译执行方式两种17.*/18.int main(){19. RETCODE retcode;20.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",21.szUID[MAXNAME] = "sa",22. szAuthStr[MAXNAME] = "";23. //SQL语句24.//直接SQL语句25.UCHARsql[37] = "insert into test values('aaa','100')";26. //预编译SQL语句27.UCHAR pre_sql[29] = "insert into test values(?,?)";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、分配一个语句句柄(statement handle)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.char a[200]="bbb";57.char b[200]="200";58.SQLINTEGER p = 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.#include <stdio、h>2.#include <string、h>3.#include <windows、h>4.#include <sql、h>5.#include<sqlext、h>6.#include <sqltypes、h>7.#include <odbcss、h>8.9.SQLHENV henv = SQL_NULL_HENV;10.SQLHDBC hdbc1 = SQL_NULL_HDBC;11.SQLHSTMT hstmt1 = SQL_NULL_HSTMT;12.13./*14.查询SQLSERVER数据库,1、条件查询,2、直接查询全部15.*/16.int main(){17. RETCODE retcode;18.UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql",19. szUID[MAXNAME] = "sa",20.szAuthStr[MAXNAME] = "";21.UCHAR sql1[39] = "select b from test where a = 'aaa'";22.UCHAR sql2[35] = "select b from test where a = ? ";23.UCHAR sql3[19] = "select b from test";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、分配一个语句句柄(statement handle)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.char a[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. char list[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、确认一个结果集就是否可用。