版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。 #include #include #include #include util.h #include EXEC SQL INCLUDE SQLCA; (1) main() EXEC SQL BEGIN DECLARE SECTION; (2) char firstname13; char userid9; char passwd19; EXEC SQL END DECLARE SECTION; EXEC SQL CONNECT TO sample; (3) EXEC SQL SELECT FIRSTNM
2、E INTO :firstname (4) FROM employee WHERE LASTNAME = JOHNSON;(4) printf( First name = %sn, firstname ); EXEC SQL CONNECT RESET; (5) return 0; 上面是一个简单的静态嵌入SQL语句的应用程序。它包括了嵌入SQL的主要部分: (1)中的include SQLCA语句定义并描述了SQLCA的结构。SQLCA用于应用程序和数据库之间的通讯,其中的SQLCODE返回SQL语句执行后的结果状态。 (2)在BEGIN DECLARE SECTION和END DECLAR
3、E SECTION之间定义了宿主变量。宿主变量可被SQL语句引用,也可以被C语言语句引用。它用于将程序中的数据通过SQL语句传给数据库管理器,或从数 据库管理器接收查询的结果。在SQL语句中,主变量前均有“:”标志以示区别。 (3)在每次访问数据库之前必须做CONNECT操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。 (4)是一条选择语句。它将表employee中的LASTNAME为“JOHNSON”的行数据的FIRSTNAME查出,并将它放在 firstname变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含update、insert和delete语句
4、。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”。 C语言与SQL SERVER数据库1.使用C语言来操作SQL SERVER数据库,采用ODBC开放式数据库连接进行数据的添加,修改,删除,查询等操作。step1:启动SQLSERVER服务,例如:HNHJ,开始菜单 -运行 -net start mssqlserverstep2:打开企业管理器,建立数据库test,在test库中建立test表(a va
5、rchar(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. SQLHENVhenv=SQL_NULL_HEN
6、V; 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. UCHARszDSNSQL_MAX_DSN_LENGTH+1=csql, 21. szUIDMAXNAME=sa, 22. szAuthStrMAXNAME=; 23. /SQL语句 24. /直接
7、SQL语句 25. UCHARsql37=insertintotestvalues(aaa,100); 26. /预编译SQL语句 27. UCHARpre_sql29=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.
8、 /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.创建S
9、QL语句 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. chara200=bbb; 57. charb200=200; 58. SQLINTEGERp=SQL_NTS; 59. /1预编译 60. SQLPrepare(hstmt1,pre_sql,29);/第三个参数与数组大
10、小相同,而不是数据库列相同 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. SQLFreeHan
11、dle(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. #include #include #include #include #include #in
12、clude #include SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; /*cpp文件功能说明:1.数据库操作中的添加,修改,删除,主要体现在SQL语句上2.采用直接执行方式和参数预编译执行方式两种*/int main() RETCODE retcode; UCHARszDSNSQL_MAX_DSN_LENGTH+1 = csql, szUIDMAXNAME = sa, szAuthStrMAXNAME = ; /SQL语句/直接SQL语句UCHA
13、Rsql37 = insert into test values(aaa,100);/预编译SQL语句UCHARpre_sql29 = insert into test values(?,?);/1.连接数据源/1.环境句柄retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); /2.连接句柄 retcode = SQLAllocHandle(SQL
14、_HANDLE_DBC, henv, &hdbc1); retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); /判断连接是否成功if ( (retcode != SQL_SUCCESS) & (retcode != SQL_SUCCESS_WITH_INFO) ) printf(连接失败!n); else /2.创建并执行一条或多条SQL语句/*1.分配一个语句句柄(statement handle)2.创建SQL语句3.执行语句4.销毁语句*/retcode = SQLAllocHandle(SQL_HANDLE_STM
15、T, hdbc1, &hstmt1); /第一种方式/直接执行/添加操作/SQLExecDirect (hstmt1,sql,37);/第二种方式/绑定参数方式char a200=bbb;char b200=200;SQLINTEGER p = SQL_NTS;/1预编译SQLPrepare(hstmt1,pre_sql,29); /第三个参数与数组大小相同,而不是数据库列相同/2绑定参数值SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);SQLBindParameter(hstmt1,2,
16、SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p);/3 执行SQLExecute(hstmt1);printf(操作成功!);/释放语句句柄SQLCloseCursor (hstmt1);SQLFreeHandle (SQL_HANDLE_STMT, hstmt1); /3.断开数据源/* 1.断开与数据源的连接. 2.释放连接句柄. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接) */SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(
17、SQL_HANDLE_ENV, henv); return(0); /#list.cpp#C代码 1. #include 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 8. 9. SQLHENVhenv=SQL_NULL_HENV; 10. SQLHDBChdbc1=SQL_NULL_HDBC; 11. SQLHSTMThstmt1=SQL_NULL_HSTMT; 12. 13. /* 14. 查询SQLSERVER数据库,1.条件查询,2.直接查询全部 15. */16. intmain() 1
18、7. RETCODEretcode; 18. UCHARszDSNSQL_MAX_DSN_LENGTH+1=csql, 19. szUIDMAXNAME=sa, 20. szAuthStrMAXNAME=; 21. UCHARsql139=selectbfromtestwherea=aaa; 22. UCHARsql235=selectbfromtestwherea=?; 23. UCHARsql319=selectbfromtest; 24. 25. retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); 26. retcode=SQLSetEn
19、vAttr(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. el
20、se 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. charlist5; 48. SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0); 49. SQLFet
21、ch(hstmt1); 50. printf(%sn,list); 51. */52. 53. /第二种方式 54. /* 55. /绑定参数方式 56. chara200=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. SQLExecu
22、te(hstmt1); 64. charlist5; 65. SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0); 66. SQLFetch(hstmt1); 67. printf(%sn,list); 68. */69. 70. /第三种方式全部输出 71. /* 72. 1.确认一个结果集是否可用。 73. 2.将结果集的列绑定在适当的变量上。 74. 3.取得行 75. */76. /3.检查结果记录(如果有的话) 77. SQLExecDirect(hstmt1,sql3,19); 78. charlist5; 79. SQLBindCol(hstmt1,
23、1,SQL_C_CHAR,list,5,0); 80. do 81. retcode=SQLFetch(hstmt1); 82. if(retcode=SQL_NO_DATA) 83. break; 84. 85. printf(%sn,list); 86. while(1); 87. 88. /释放语句句柄 89. SQLCloseCursor(hstmt1); 90. SQLFreeHandle(SQL_HANDLE_STMT,hstmt1); 91. 92. 93. 94. /4.断开数据源 95. /* 96. 1.断开与数据源的连接. 97. 2.释放连接句柄. 98. 3.释放环境
24、句柄(如果不再需要在这个环境中作更多连接) 99. */100. SQLDisconnect(hdbc1); 101. SQLFreeHandle(SQL_HANDLE_DBC,hdbc1); 102. SQLFreeHandle(SQL_HANDLE_ENV,henv); 103. return(0); 104. 创建数据源的过程代码:#include#inlcude#include#include#include#include#define SNO_LEN 30#define NAME_LEN 50#define DEPART_LEN 100#define SSEX_LEN 5int m
25、ain()/*Step 1 定义句柄和变量 */以king开头的表示的是连接KingbaseES的变量/以server开头的表示的是连接SQLSERVER的变量SQLHENV kinghenv,serverhenv;SQLHDBC kinghdbc,serverhdbc;SQLHSTMT kinghstmt,serverhstmt;SQLRETURN ret;SQLCHAR sNameNAME_LEN,sDepartDEPART_LEN, sSexSSEX_LEN,sSnoSNO_LEN;SQLINTEGER sAge;SQLINTEGRR cbAge=0,cbSno=SQL_NTS,cbSe
26、x=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_VE
27、RSION,(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(se
28、rverhdbc,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_
29、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,&cbName);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,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度2025版木材行业标准制定合作合同2篇
- 福建省泉州市南安市2024-2025学年八年级上学期期末英语试题(无答案)
- 创新创业-职业核心能力课件
- 丝印精加工在微型电子设备制造领域的应用考核试卷
- 二零二五年度墓地陵园土地租赁与使用权转让合同4篇
- 母婴行业2025年度母婴用品环保认证服务合同2篇
- 二零二五版钢材货物流动银行托管运输合同3篇
- 二零二五年度木制品生产与销售承包合同3篇
- 2025年公司内部竞业保密协议
- 2025年太阳能光伏电站智能监控工程施工合同
- 2024年高纯氮化铝粉体项目可行性分析报告
- 安检人员培训
- 山东省潍坊市2024-2025学年高三上学期1月期末 英语试题
- 危险性较大分部分项工程及施工现场易发生重大事故的部位、环节的预防监控措施
- 《榜样9》观后感心得体会四
- 2023事业单位笔试《公共基础知识》备考题库(含答案)
- 化学-广东省广州市2024-2025学年高一上学期期末检测卷(一)试题和答案
- 2025四川中烟招聘高频重点提升(共500题)附带答案详解
- EHS工程师招聘笔试题与参考答案(某大型央企)2024年
- 营销策划 -丽亭酒店品牌年度传播规划方案
- 2025年中国蛋糕行业市场规模及发展前景研究报告(智研咨询发布)
评论
0/150
提交评论