欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言连接SQL数据库.doc

    • 资源ID:4517647       资源大小:113KB        全文页数:10页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言连接SQL数据库.doc

    ,连接到SAMPLE数据库,查询LASTNAME为JOHNSON的FIRSTNAME信息。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include "util.h" #include <sqlca.h> 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 FIRSTNME 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 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 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. SQLHENVhenv=SQL_NULL_HENV; 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. /直接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. /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.创建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. chara200="bbb" 57. charb200="200" 58. SQLINTEGERp=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. #include <stdio.h> #include <string.h> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <sqltypes.h> #include <odbcss.h> 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语句UCHARsql37 = "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_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_STMT, 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,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(SQL_HANDLE_ENV, henv); return(0); /#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. SQLHENVhenv=SQL_NULL_HENV; 10. SQLHDBChdbc1=SQL_NULL_HDBC; 11. SQLHSTMThstmt1=SQL_NULL_HSTMT; 12. 13. /* 14. 查询SQLSERVER数据库,1.条件查询,2.直接查询全部 15. */16. intmain() 17. 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=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.分配一个语句句柄(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. SQLFetch(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. SQLExecute(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,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.释放环境句柄(如果不再需要在这个环境中作更多连接) 99. */100. SQLDisconnect(hdbc1); 101. SQLFreeHandle(SQL_HANDLE_DBC,hdbc1); 102. SQLFreeHandle(SQL_HANDLE_ENV,henv); 103. return(0); 104. 创建数据源的过程代码:#include<stdlib.h>#inlcude<stdio.h>#include<windows.h>#include<sql.h>#include<sqlext.h>#include<Sqltypes.h>#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 sNameNAME_LEN,sDepartDEPART_LEN, sSexSSEX_LEN,sSnoSNO_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,&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,0,&cbAge);ret=SQLBindParameter(serverhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbDepart);/*执行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 errorn");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;

    注意事项

    本文(C语言连接SQL数据库.doc)为本站会员(小**)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开