C语言连接SQL数据库例子.docx

上传人:大张伟 文档编号:6109417 上传时间:2020-09-11 格式:DOCX 页数:15 大小:47.31KB
返回 下载 相关 举报
C语言连接SQL数据库例子.docx_第1页
第1页 / 共15页
C语言连接SQL数据库例子.docx_第2页
第2页 / 共15页
C语言连接SQL数据库例子.docx_第3页
第3页 / 共15页
C语言连接SQL数据库例子.docx_第4页
第4页 / 共15页
C语言连接SQL数据库例子.docx_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《C语言连接SQL数据库例子.docx》由会员分享,可在线阅读,更多相关《C语言连接SQL数据库例子.docx(15页珍藏版)》请在三一文库上搜索。

1、.连接到 SAMPLE 数据库,查询 LASTNAME为 JOHNSON的 FIRSTNAME 信息。#include#include#include#includeutil.h#includeEXECSQLINCLUDESQLCA;(1 )main()EXECSQLBEGINDECLARESECTION;( 2 )charfirstname13;charuserid9;charpasswd19;EXECSQLENDDECLARESECTION;EXECSQLCONNECTTO sample;( 3 )EXECSQLSELECTFIRSTNMEINTO:firstname(4 )FROMemp

2、loyeeWHERELASTNAME=JOHNSON; (4 )printf(Firstname=%sn,firstname);EXECSQLCONNECTRESET;(5 )return0;上面是一个简单的静态嵌入SQL 语句的应用程序。它包括了嵌入SQL 的主要部分:(1 )中的 includeSQLCA语句定义并描述了SQLCA 的结构。 SQLCA 用于应用程序和数据库之间的通讯,其中的 SQLCODE返回 SQL 语句执行后的结果状态。(2 )在 BEGINDECLARESECTION和 ENDDECLARESECTION之间定义了宿主变量。宿主变量可被 SQL语句引用,也可以被C

3、语言语句引用。它用于将程序中的数据通过SQL 语句传给数据库管理器,或从数据库管理器接收查询的结果。在SQL 语句中,主变量前均有 “:”标志以示区别。( 3 )在每次访问数据库之前必须做 CONNECT 操作,以连接到某一个数据库上。这时,应该保证数据库实例已经启动。(4 )是一条选择语句。它将表 employee 中的 LASTNAME 为“ JOHNSON”的行数据的 FIRSTNAME 查出,并将它放在 firstname 变量中。该语句返回一个结果。可以通过游标返回多个结果。当然,也可以包含 update、insert和 delete语句。(5 )最后断开数据库的连接。从上例看出,每

4、条嵌入式SQL 语句都用EXECSQL 开始,表明它是一条SQL 语句。这也是告诉预编译器在 EXECSQL 和 “;”之间是嵌入SQL 语句。如果一条嵌入式SQL 语句占用多行,在C 程序中可以用续行符 “”。c 语言用 vc 连接 sql server 20002009/11/02 09:34 sql server.1. 提取单条记录/#import C:Program FilesCommon FilesSystemADOmsado15.dll /no_namespace,rename(EOF,adoEOF),named_guids CoInitialize(NULL);_bstr_t v

5、arSource=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb; /_bstr_t varSource=Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword; _ConnectionPtr m_pConnection(_uuidof(Connection); m_pConnection-Open(varSource,adModeUnknow);_RecordsetPtr m_pSet(_uuid(Recor

6、dset);try m_pSet-Open(%1,m_pConnection.GetInterfacePtr()adOpenDynamic,adLockPessimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();return;_variant_t var;CString %2=;long fldc=m_pSet-GetFields()-GetCount();long i=0;try m_pSet-MoveFirst();if(!m_pSet-adoEOF)for(i=0;iGetCollect(long)i

7、);var.ChangeType(VT_BSTR);%2+=var.bstrVal;%2+= ;/m_pSet-MoveNext();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();delete e;/m_pSet-MoveFirst();CoUninitialize(NULL);.2. 单值比较/#import C:Program FilesCommon FilesSystemADOmsado15.dll /no_namespace,rename(EOF,adoEOF),named_guids CoInitialize(NULL);_bs

8、tr_t varSource=Provider=Microsoft.Jet.OLEDB.4.0;Data Source=*.mdb; /_bstr_t varSource=Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword; _ConnectionPtr m_pConnection(_uuidof(Connection); m_pConnection-Open(varSource,adModeUnknow);_RecordsetPtr m_pSet(_uuid

9、(Recordset);try m_pSet-Open(%1,m_pConnection.GetInterfacePtr()adOpenDynamic,adLockPessimistic,adCmdText);catch(_com_error *e)AfxMessageBox(e-ErrorMessage();return;_variant_t var;try m_pSet-MoveFirst();if(!m_pSet-adoEOF)var=m_pSet-GetCollect(long)0);var.ChangeType(VT_I2);int %3=var.intVal;if(%3=%4)%5

10、/m_pSet-MoveNext();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();delete e;/m_pSet-MoveFirst();CoUninitialize(NULL);3. 显示表格/#import C:Program FilesCommon FilesSystemADOmsado15.dll /no_namespace,rename(EOF,adoEOF),named_guids.CoInitialize(NULL);_bstr_t varSource=Provider=Microsoft.Jet.OLEDB.4.0;D

11、ata Source=*.mdb; /_bstr_t varSource=Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword; _ConnectionPtr m_pConnection(_uuidof(Connection); m_pConnection-Open(varSource,adModeUnknow);/ 打开属性为默认( adModeRead(只读 ) ,adModeWrite( 可写 ) ,adModeReadWrite(可读写 ) 等)_Rec

12、ordsetPtr m_pSet(_uuid(Recordset); try HRESULT hr=m_pSet-Open(%1,m_pConnection.GetInterfacePtr(), adOpenDynamic,adLockPessimistic,adCmdText);catch(_com_error *e) AfxMessageBox(e-ErrorMessage();if(SUCCESSED(hr)/ 表打开成功FieldsPtr p_fields=m_pSet-Fields;FieldPtr p_field;_variant_t var_index;LPCSTR field_

13、name;int index=0;_bstr_t bstr_field_name;int countfields=p_fields-GetCount();CString *Column=new CStringcountfields;CListCtrl *pList=(CListCtrl*)GetDlgItem(%1);/IDC_LIST_TABLEDATAVERIFY(pList);pList-DeleteAllItems();for(index=0;indexItemvar_index;bstr_field_name=p_field-GetName();field_name=(LPCSTR)

14、bstr_field_name;Columnindex=field_name;int ColumnWidth=Columnindex.GetLength()*15; pList-InsertColumn(index,field_name,LVCFMT_CENTER,ColumnWidth); int i=0;_bstr_t vCol;./pList-SetTextBkColor(RGB(122,200,122);/pList-SetTextColor(RGB(0,0,200);while(!m_pSet-adoEOF)pList-Insert(i,atoi(i);for(int j=0;jGe

15、tCollect(long)j);pList-SetItemText(i,j,vCol);m_pSet-MoveNext();i+;CoUninitialize(NULL);C语言与 SQL SERVER数据库1. 使用 C 语言来操作 SQL SERVER数据库 , 采用 ODBC开放式数据库连接进行数据的添加 , 修改 , 删除 , 查询等操作。step1: 启动 SQLSERVER服务 , 例如 :HNHJ,开始菜单 - 运行 -net startmssqlserverstep2: 打开企业管理器 , 建立数据库 test, 在 test 库中建立 test 表(a varchar(20

16、0),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 = sq

17、l_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 szDSNSQL_MAX_DSN_LENGTH+1 = csql,21. szUIDMAXNAME = sa,22. szAuthStrMAXNAME = ;23. /

18、SQL 语句24. /直接 SQL 语句25.UCHARsql37 = insert into test values(aaa,100);26. /预编译 SQL 语句27.UCHARpre_sql29 = 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,

19、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

20、. /*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 a200=bbb;57. char b200=200;58. SQLINTEGER p = SQL_NTS;59. /1 预编

21、译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. /释放语句

22、句柄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.c

23、pp#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 szDSNS

24、QL_MAX_DSN_LENGTH+1 = csql,19. szUIDMAXNAME = sa,20. szAuthStrMAXNAME = ;21.UCHARsql139 = select b from test where a = aaa;22.UCHARsql235 = select b from test where a = ? ;23.UCHARsql319 = select b from test;24.25. retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv);26. retcode = SQLSetEnvAttr(he

25、nv, 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( 连接失败

26、 !);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 list5;48. SQLBindCol(hstmt1, 1, SQL_C_CHAR, list,

27、5, 0);49. SQLFetch(hstmt1);50. printf(%sn,list);51. */52.53. /第二种方式54. /*55. /绑定参数方式56. char a200=aaa;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. 执

28、行63. SQLExecute(hstmt1);64. char list5;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. char list5;79. SQLBindC

29、ol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);80. do81. retcode = SQLFetch(hstmt1);82. if(retcode = SQL_NO_DA TA)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

30、. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接)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#defineSNO_LEN30#defineNAME_LEN50.#defineDEPART_LEN100#defineSSEX_LEN5intmai

31、n()/*Step1 定义句柄和变量*/ 以 king开头的表示的是连接KingbaseES的变量/ 以 server开头的表示的是连接SQLSERVER的变量SQLHENVkinghenv,serverhenv;SQLHDBCkinghdbc,serverhdbc;SQLHSTMTkinghstmt,serverhstmt;SQLRETURNret;SQLCHARsNameNAME_LEN,sDepartDEPART_LEN,sSexSSEX_LEN,sSnoSNO_LEN;SQLINTEGERsAge;SQLINTEGRRcbAge=0,cbSno=SQL_NTS,cbSex=SQL_NT

32、S,cbName=SQL_NTS,cbDepart=SQL_NTS;/*Step2 初始化环境 */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_O DBC3,0);ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(

33、void*)SQL_OV_ ODBC3,0);/*Step3 建立连接 */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(serverhd

34、bc,SQLServer,SQL_NTS,sa,SQL_NTS,sa,SQL_NTS);if(!SQL_SUCCEEDED(ret)return-1;/ 连接失败时返回错误值;/*Step4 初始化语句句柄*/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,server

35、hdbc,&serverhstmt);/*Step5 两种方式执行语句*/* 预编译带有参数的语句*/ret=SQLPrepare(sercerhstmt,INSERTINTOSTUDENT(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=SQLBin

36、dParameter(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(ser

37、verhstmt,5,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,DEPART_LEN,0,sDepart,0,&cbDepart);/* 执行 SQL 语句 */ret=SQLExecDirect(kinghstmt,SELECT*FROMSTUDENT,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); /*Step6 处理结果集并执行预编译后的语句*/while(ret=SQLFetch(kinghstmt)!=SQL_NO_D

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1