C语言连接SQL数据库 下载本文

内容发布更新时间 : 2024/5/4 7:26:04星期一 下面是文章的全部内容请认真阅读。

连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。 #include #include #include #include \ #include

EXEC SQL 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 SQL CONNECT TO sample; (3)

EXEC SQL SELECT FIRSTNME INTO :firstname (4) FROM employee

WHERE LASTNAME = 'JOHNSON';(4)

printf( \ 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语言与SQL SERVER数据库

1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。

step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 ->运行 ->net start mssqlserver

step2:打开企业管理器,建立数据库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 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 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] = \ 21. szUID[MAXNAME] = \ 22. szAuthStr[MAXNAME] = \ 23. //SQL语句

24. //直接SQL语句

25. UCHAR sql[37] = \

26. //预编译SQL语句

27. UCHAR pre_sql[29] = \ 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_I

NFO) ) {

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]=\ 57. char b[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,2

00,0,&a,0,&p);

63. SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2

00,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 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 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] = \ 19. szUID[MAXNAME] = \ 20. szAuthStr[MAXNAME] = \

21. UCHAR sql1[39] = \ 22. UCHAR sql2[35] = \

23. UCHAR sql3[19] = \ 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_I

NFO) ) {

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. char list[5];

48. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0); 49. SQLFetch(hstmt1); 50. printf(\ 51. */ 52.

53. //第二种方式 54. /*

55. //绑定参数方式 56. char a[200]=\

57. SQLINTEGER p = SQL_NTS; 58. //1.预编译

59. SQLPrepare(hstmt1,sql2,35); //第三个参数与数组大小相同,而不是数据库列相

60. //2.绑定参数值

61. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2

00,0,&a,0,&p); 62. //3.执行

63. SQLExecute(hstmt1);