C语言连接SQL数据库_第1页
C语言连接SQL数据库_第2页
C语言连接SQL数据库_第3页
C语言连接SQL数据库_第4页
C语言连接SQL数据库_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、连接到SAMPL数据库,查询LASTNAM为JOHNSO的FIRSTNAM信息。 #include #include #include #include #include EXEC main() EXEC char char char EXEC EXEC EXEC SQL util.h INCLUDE SQLCA;(1) SQL firstname13; userid9; passwd19; SQL SQL SQL BEGIN DECLARE SECTION;(2) END DECLARE SECTION; CONNECT TO sample; SELECT FIRSTNME INTO 3)

2、:firstname 4) FROM WHERE printf( EXEC return 上面是一 部分: (1) 中的in eludeSQLCA语句定义并描述了 SQLCA勺结构。 应用程序和数据库之间的通讯,其中的 SQLCOD返回SQL语句执行后的结果状 态。 (2) 在 BEGIN DECLARE SECTION和 END DECLARE SECTION之间 定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用 于将程序中的数据通过SQL语句传给数据库管理器,或从数 据库管理器接收查 询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3) 在每次访问数据

3、库之前必须做CONNEC操作,以连接到某一个数据库上。 这时,应该保证数据库实例已经启动。 (4) 是一条选择语句。它将表 employee中的LASTNAM为“JOHNSON的行 数据的FIRSTNAM查出,并将它放在firstname 变量中。该语句返回一个结果。 可以通过游标返回多个结果。当然,也可以包含 update、insert 和 delete 语 句。 ( 5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL 语句。这也是告诉预编译器在 EXEC SQL和“;”之间是嵌入SQL语句。如果 一条嵌入式SQL语句占用多行,在C程序中

4、可以用续行符“ ”。 employee LASTNAME =JOHNSON;(4) First name = %sn, SQL CONNECT RESET;(5) 0; 个简单的静态嵌入SQL语句的应用程序。 firstname 它包括了嵌入 ); SQL的主要 SQLCA用 于 精选文库 C语言与SQL SERVE数据库 1.使用C语言来操作SQL SERVE数据库,采用ODB(开放式数据库连接进行数据 的添加,修改,删除,查询等操作。 step1:启动 SQLSERVER务,例如:HNHJ,开始菜单- 运行-net start mssqlserver step2:打开企业管理器,建立数据库

5、test,在test库中建立test表(a varchar(200),b varchar(200) step3:建立系统DSN开始菜单- 运行-odbead32, 添力卩-SQL SERVER 名称:esql,服务器:HNHJ 使用用户使用登录ID和密码的SQLSERVER证,登录ID:sa,密码: 更改默认的数据库为:test 测试数据源,测试成功,即 DNS添加成功。 2.epP文件完整代码 /#save.e pp # C代码 1. #in elude 2. 3. 4. 5. 6. 7. 8. #in elude #i nclude #in elude #in elude #in elud

6、e #in elude 21. 22. 4 9. 10. 11. SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbe1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; 12. 13. 14. 15. /* 16. 17. 18. epp文件功能说明: 1. 数据库操作中的添加,修改,删除,主要体现在 2. 采用直接执行方式和参数预编译执行方式两种 SQL语句上 19. 20. */ int mai n() RETCODE reteode; UCHAR szDSNSQL_MAX_DSN_LENGTH+1 =

7、esql, szUIDMAXNAME = sa, szAuthStrMAXNAME=; 精选文库 15 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. IISQL语句 II直接SQL语句 UCHAR sql37 = in sert into test values(aaa,100); II预编译SQL语句 UCHARp re_sql29 = in sert into test values(?,?); II1.连接数据源 111. 环境句柄 r

8、etcode = SQLAllocHa ndle (SQL_HANDLE_ENV, NULL, retcode = SQLSetE nvAttr(he nv, SQL_ATTR_ODBC_VERSION, (SQL PO INTER)SQL_OV_ODBC3, SQL_IS_INTEGER); /2.连接句柄 retcode = SQLAllocHa ndle(SQL_HANDLE_DBC, hen v, retcode = SQLCo nn ect(hdbc1, szDSN, 4, szUID, II判断连接是否成功 if ( (retcode != SQL_SUCCESS) else 11

9、2. 创建并执行一条或多条SQL语句 I* 1. 分配一个语句句柄 (stateme nt han dle) 2. 创建SQL语句 3. 执行语句 4. 销毁语句 *I 2, szAuthStr, 0); SQL_SUCCESS_WITH_I 48. 49. 50. 51. 52. 53. 54. retcode = SQLAllocHa ndle(SQL_HANDLE_STMT, /第一种方式 II直接执行 II添加操作 lISQLExecDirect (hstmt1,sql,37); hdbcl, 55. 56. 57. 58. 59. 60. /第二种方式 /绑定参数方式 char a2

10、00=bbb; char b200=200; SQLINTEGER p = SQL_NTS; 1预编译 SQL Prep are(hstmt1, pre_sql,29); /第三个参数与数组大小相同,而不是数据库列 61. 62. 相同 II2绑定参数值 SQLBi ndP arameter(hstmt1,1,SQL_ PARAM _INPU T,SQL_C_CHAR,SQL_CHAR,2 00,0, 63. 64. 65. 66. 67. SQLBi ndP arameter(hstmt1,2,SQL_ PARAM _INPU T,SQL_C_CHAR,SQL_CHAR,2 00,0, /3

11、执行 SQLExecute(hstmt1); 68. 69. 70. 71. 72. 73. 74. printf(”操作成功!); /释放语句句柄 SQLCIoseCursor (hstmt1); SQLFreeHa ndle (SQL_HANDLE_STMT, hstmt1); 75. 76. 77. 78. 79. 80. 81. 82. 83. /3.断开数据源 /* 1. 断开与数据源的连接. 2. 释放连接句柄. 3. 释放环境句柄(如果不再需要在这个环境中作更多连接) */ SQLDisco nn ect(hdbc1); SQLFreeHa ndle(SQL_HANDLE_DBC

12、, hdbc1); SQLFreeHa ndle(SQL_HANDLE_ENV, he nv); return(O); /#list.c pp # C代码 1. #in elude 2. 3. 4. 5. 6. 7. 8. #in clude #in clude #in clude #in clude #in clude #in clude SQLHENV henv = SQL_NULL_HENV; 10. SQLHDBC hdbc1 = SQL_NULL_HDBC; 11. SQLHSTMT hstmt1 = SQL_NULL_HSTMT; 12. 13. 14. 15. 16. 9. 17

13、. 18. /* 查询SQLSERVER数据库,1.条件查询,2.直接查询全部 */ int mai n() RETCODE retcode; UCHAR szDSNSQL_MAX_DSN_LENGTH+1 = csql, 19. szUIDMAXNAME = sa. 20. szAuthStrMAXNAME=”; 21. UCHAR sql139 = select b from test where a = aaa; 22. UCHAR sql235 = select b from test where a = ?; 23. UCHAR sql319 = select b from test

14、; 24. 25. retcode = SQLAllocHa ndle (SQL_HANDLE_ENV, NULL, 26. retcode = SQLSetE nvAttr(he nv, SQL_ATTR_ODBC_VERSION, 27. (SQL PO INTER)SQL_OV_ODBC3, 28. SQL_IS_INTEGER); 29. retcode = SQLAllocHa ndle(SQL_HANDLE_DBC, hen v, 30. /1.连接数据源 31. retcode = SQLCo nn ect(hdbc1, szDSN, 4, szUID, 2, szAuthStr

15、, 0); 32. if ( (retcode != SQL_SUCCESS) 34. else 35. 112.创建并执行一条或多条 SQL语句 36. /* 37. 1.分配一个语句句柄 (stateme nt han dle) 38. 2.创建SQL语句 39. 3.执行语句 40. 4.销毁语句 41. */ 42. retcode = SQLAllocHa ndle(SQL_HANDLE_STMT, hdbc1, 43. /第一种方式 44. /* 45. /直接执行 46. SQLExecDirect (hstmt1,sql1,39); 47. char list5; 48. SQ

16、LB in dCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0); 49. SQLFetch(hstmt1); 50. prin tf(%sn,list); 51. */ 52. 53. /第二种方式 54. /* 55. /绑定参数方式 56. char a200=aaa; 57. SQLINTEGER p = SQL_NTS; 58. /1.预编译 59. SQL Prep are(hstmt1,sql2,35); II第二个参数与数组大小相同,而不是数据库列相 同 60. II2.绑定参数值 61. 62. 63. 64. 65. 66. 67. 68. 69.

17、 70. 71. 72. SQLBi ndP arameter(hstmt1,1,SQL_ PARAM _INPU T,SQL_C_CHAR,SQL_CHAR,2 00,0, char list5; SQLB in dCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0); SQLFetch(hstmt1); prin tf(%srr,list); */ 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. /第三种方式全部输出 /* 1. 确认一个结果集是否可用。

18、2. 将结果集的列绑定在适当的变量上。 3. 取得行 */ /3.检查结果记录(如果有的话) SQLExecDirect (hstmt1,sql3,19); char list5; SQLBi ndCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0); do retcode = SQLFetch(hstmt1); if(retcode = SQL_NO_DA TA) break; prin tf(%sn,list); while(1); /释放语句句柄 SQLCloseCursor (hstmt1); SQLFreeHa ndle (SQL_HANDLE_STMT, h

19、stmt1); 93. 94. 95. 96. 97. 98. 99. /4.断开数据源 /* 1. 断开与数据源的连接. 2. 释放连接句柄. 3. 释放环境句柄(如果不再需要在这个环境中作更多连接) */ 100. 101. 102. 103. SQLDisco nn ect(hdbc1); SQLFreeHa ndle(SQL_HANDLE_DBC, hdbc1); SQLFreeHa ndle(SQL_HANDLE_ENV, he nv); return(O); 104. 创建数据源的过程代码 #in clude #in lcude #in cludewi ndows.h #in cl

20、ude #in clude #in clude #defi ne SNO_LEN 30 #defi ne NAME LEN 50 #defi ne DEP ART_LEN 100 #defi ne SSEX LEN 5 int main() I*Ste p1定义句柄和变量 *I II以king开头的表示的是连接 KingbaseES 的变量 II 以 server 开头的表示的是连接 SQLSERVER的变量 SQLHENV kin ghe nv,serverhe nv; SQLHDBC kin ghdbc,serverhdbc; SQLHSTMT kin ghstmt,serverhstmt

21、; SQLRETURN ret; SQLCHAR sNameNAME_LEN,sDe partDE PART_LEN, sSexSSEX_LEN,sS no SNO_LEN; SQLINTEGER sAge; SQLINTEGRR cbAge=O,cbS no=SQL_NTS,cbSex=SQL_NTS, cbName=SQL_NTS,cbDe part=SQL_NTS; /*Step2初始化环境*/ ret=SQLAIIocHa ndle(SQL_HANDLE_ENV,SQL_NULL_HANDLE, ret=SQLAIIocHa ndle(SQL_HANDLE_ENV,SQL_NULL_H

22、ANDLE, ret=SQLSetE nvAttr(ki nghe nv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_O DBC3,0); ret=SQLSetE nvAttr(serverhe nv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ ODBC3,0); /*Ste p3建立连接*/ ret=SQLAllocHa ndle(SQL_HANDLE_DBC,k in ghe nv, ret=SQLAllocHa ndle(SQL_HANDLE_DBC,serverhe nv, ODBC,SQL_NTS,SYSTEM, ret=SQ

23、LCo nn ect(ki nghdbc,Ki ngbaseES SQL_NTS,MANAGER,SQL_NTS); if(!SQL_SUCCEEDED(ret) return -1;/连接失败时返回错误值; ret=SQLCo nn ect(serverhdbc,SQLServer,SQL_NTS,sa, SQL_NTS,sa,SQL_NTS); if(!SQL_SUCCEEDED(ret) return -1;/连接失败时返回错误值; /*Step4初始化语句句柄*/ ret=SQLAllocHa ndle(SQL_HANDLE_STMT,ki nghdbc, ret=SQLSetStmt

24、Attr(k in ghstmt,SQL_ATTR_ROW_BIND_T YP E(SQL POINTE R) SQL_BIND_BY_COLUMN,SQL_IS_INTEGER); ret=SQLAllocHa ndle(SQL_HANDLE_STMT,serverhdbc, /*Step 5两种方式执行语句*/ /*预编译带有参数的语句*/ ret=SQL Prep are(sercerhstmt,INSERT INTO STUDENT(SNO,SNAME,SSEX,SA GE,SDE PT) VALUES(?,?,?,?,?),SQL_NTS); if(ret=SQL_SUCCESS|r

25、et=SQL_SUCCESS_WITH_INFO)ret=SQLBi ndP arameter(serverhstmt,1,SQL_ PARAM _INPU T,SQL_C_CHAR, SQL_CHAR,SNO_LEN,0,sS no,0, ret=SQLBi ndP arameter(serverhstmt,2,SQL_ PARAM _INPU T,SQL_C_CHAR, SQL_CHAR,SNAME_LEN,0,sName,0, ret=SQLBi ndP arameter(serverhstmt,3,SQL_ PARAM _INPU T,SQL_C_CHAR, SQL_CHAR,2,0,sSex,0, ret=SQLBi ndP arameter(serverhstmt,4,SQL_ PARAM _INPU T,SQL_C_LONG, SQL_INTEGER,0,0, ret=SQLBi ndP arameter(serverhstmt,5,SQL_ PARAM _INPU T,SQL_C_CHAR, SQL_CHAR,DE PART_LEN,0,sDe part,0, /*执行SQL语句*/ ret=SQLExecDire

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论