C语言连接SQL数据库例子(13页).doc

上传人:1595****071 文档编号:35365706 上传时间:2022-08-21 格式:DOC 页数:13 大小:195.50KB
返回 下载 相关 举报
C语言连接SQL数据库例子(13页).doc_第1页
第1页 / 共13页
C语言连接SQL数据库例子(13页).doc_第2页
第2页 / 共13页
点击查看更多>>
资源描述

《C语言连接SQL数据库例子(13页).doc》由会员分享,可在线阅读,更多相关《C语言连接SQL数据库例子(13页).doc(13页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-C语言连接SQL数据库例子-第 13 页连接到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) EX

2、EC 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 DECLA

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

4、pdate、insert和delete语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式SQL语句都用EXEC SQL开始,表明它是一条SQL语句。这也是告诉预编译器在EXEC SQL和“;”之间是嵌入SQL语句。如果一条嵌入式SQL语句占用多行,在C程序中可以用续行符“”。 c语言用vc连接sql server 20002009/11/02 09:34 sql server /#import C:Program FilesCommon FilesSystemADOmsado15.dll /no_namespace,rename(EOF,adoEOF),named_guidsCoIn

5、itialize(NULL);_bstr_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);_RecordsetP

6、tr m_pSet(_uuid(Recordset);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

7、=0;iGetCollect(long)i);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);/#import C:Program FilesCommon FilesSystemADOmsado15.dll /no_namespace,rename(EOF,adoEOF),named_guidsCoInitiali

8、ze(NULL);_bstr_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_p

9、Set(_uuid(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

10、(%3=%4)%5/m_pSet-MoveNext();catch(_com_error *e)AfxMessageBox(e-ErrorMessage();delete e;/m_pSet-MoveFirst();CoUninitialize(NULL);/#import C:Program FilesCommon FilesSystemADOmsado15.dll /no_namespace,rename(EOF,adoEOF),named_guidsCoInitialize(NULL);_bstr_t varSource=Provider=Microsoft.Jet.OLEDB.4.0;

11、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);/打开属性为默认(adModeRead(只读),adModeWrite(可写),adModeReadWrite(可读写)等)_RecordsetPtr m

12、_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_name;int index=

13、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)bstr_field_name

14、;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;jGetCollect(long)j);p

15、List-SetItemText(i,j,vCol);m_pSet-MoveNext();i+;CoUninitialize(NULL); 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,开始菜单 -运行 -odbc

16、ad32,添加-SQL SERVER名称:csql,服务器:HNHJ使用用户使用登录ID和密码的SQLSERVER验证,登录ID:sa,密码: 更改默认的数据库为:test.测试数据源,测试成功,即DNS添加成功。/#save.cpp#C代码 1. #include 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 8. sqlhenvhenv=sql_null_henv; 9. sqlhdbchdbc1=sql_null_hdbc; 10. sqlhstmthstmt1=sql_null_hstmt

17、; 11. cpp文件功能说明: 12. 1.数据库操作中的添加,修改,删除,主要体现在SQL语句上 13. 2.采用直接执行方式和参数预编译执行方式两种 14. intmain() 15. RETCODEretcode; 16. UCHARszDSNSQL_MAX_DSN_LENGTH+1=csql, 17. szUIDMAXNAME=sa, 18. szAuthStrMAXNAME=; 19. /SQL语句 20. /直接SQL语句 21. UCHARsql37=insertintotestvalues(aaa,100); 22. /预编译SQL语句 23. UCHARpre_sql29=

18、insertintotestvalues(?,?); 24. /1.连接数据源 25. /1.环境句柄 26. retcode=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv); 27. retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, 28. (SQLPOINTER)SQL_OV_ODBC3, 29. SQL_IS_INTEGER); 30. /2.连接句柄 31. retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1); 32. retcode=SQLConne

19、ct(hdbc1,szDSN,4,szUID,2,szAuthStr,0); 33. /判断连接是否成功 34. if(retcode!=SQL_SUCCESS)&(retcode!=SQL_SUCCESS_WITH_INFO) 35. printf(连接失败!n); 36. else 37. /2.创建并执行一条或多条SQL语句 38. 1.分配一个语句句柄(statementhandle) 39. 2.创建SQL语句 40. 3.执行语句 41. 4.销毁语句 42. retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1); 43. /第

20、一种方式 44. /直接执行 45. /添加操作 46. /SQLExecDirect(hstmt1,sql,37); 47. /第二种方式 48. /绑定参数方式 49. chara200=bbb; 50. charb200=200; 51. SQLINTEGERp=SQL_NTS; 52. /1预编译 53. SQLPrepare(hstmt1,pre_sql,29);/第三个参数与数组大小相同,而不是数据库列相同 54. /2绑定参数值 55. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0

21、,&p); 56. SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&b,0,&p); 57. /3执行 58. SQLExecute(hstmt1); 59. printf(操作成功!); 60. /释放语句句柄 61. SQLCloseCursor(hstmt1); 62. SQLFreeHandle(SQL_HANDLE_STMT,hstmt1); 63. /3.断开数据源 64. 1.断开与数据源的连接. 65. 2.释放连接句柄. 66. 3.释放环境句柄(如果不再需要在这个环境中作更多连接) 6

22、7. SQLDisconnect(hdbc1); 68. SQLFreeHandle(SQL_HANDLE_DBC,hdbc1); 69. SQLFreeHandle(SQL_HANDLE_ENV,henv); 70. return(0); #include #include #include #include #include #include #include SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; cpp文件功能说明:1.数据库操作中的添加

23、,修改,删除,主要体现在SQL语句上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(?,?);retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retc

24、ode = 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) ) pri

25、ntf(连接失败!n); else 1.分配一个语句句柄(statement handle)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(h

26、stmt1,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); 1.断开与数据源的连接. 2.释放连接句柄. 3.释放环境句柄 (如果不再需要在这个环境中作更多连接)SQL

27、Disconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0); /#list.cpp#C代码 1. #include 2. #include 3. #include 4. #include 5. #include 6. #include 7. #include 8. SQLHENVhenv=SQL_NULL_HENV; 9. SQLHDBChdbc1=SQL_NULL_HDBC; 10. SQLHSTMThstmt1=SQL_NULL_HSTMT;

28、11. 查询SQLSERVER数据库,1.条件查询,2.直接查询全部 12. intmain() 13. RETCODEretcode; 14. UCHARszDSNSQL_MAX_DSN_LENGTH+1=csql, 15. szUIDMAXNAME=sa, 16. szAuthStrMAXNAME=; 17. UCHARsql139=selectbfromtestwherea=aaa; 18. UCHARsql235=selectbfromtestwherea=?; 19. UCHARsql319=selectbfromtest; 20. retcode=SQLAllocHandle(SQ

29、L_HANDLE_ENV,NULL,&henv); 21. retcode=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION, 22. (SQLPOINTER)SQL_OV_ODBC3, 23. SQL_IS_INTEGER); 24. retcode=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc1); 25. /1.连接数据源 26. retcode=SQLConnect(hdbc1,szDSN,4,szUID,2,szAuthStr,0); 27. if(retcode!=SQL_SUCCESS)&(retcode!=SQ

30、L_SUCCESS_WITH_INFO) 28. printf(连接失败!); 29. else 30. /2.创建并执行一条或多条SQL语句 31. 1.分配一个语句句柄(statementhandle) 32. 2.创建SQL语句 33. 3.执行语句 34. 4.销毁语句 35. retcode=SQLAllocHandle(SQL_HANDLE_STMT,hdbc1,&hstmt1); 36. /第一种方式 37. /直接执行 38. SQLExecDirect(hstmt1,sql1,39); 39. charlist5; 40. SQLBindCol(hstmt1,1,SQL_C_

31、CHAR,list,5,0); 41. SQLFetch(hstmt1); 42. printf(%sn,list); 43. /第二种方式 44. /绑定参数方式 45. chara200=aaa; 46. SQLINTEGERp=SQL_NTS; 47. /1.预编译 48. SQLPrepare(hstmt1,sql2,35);/第三个参数与数组大小相同,而不是数据库列相同 49. /2.绑定参数值 50. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p); 51. /3.执行 52.

32、 SQLExecute(hstmt1); 53. charlist5; 54. SQLBindCol(hstmt1,1,SQL_C_CHAR,list,5,0); 55. SQLFetch(hstmt1); 56. printf(%sn,list); 57. /第三种方式全部输出 58. 1.确认一个结果集是否可用。 59. 2.将结果集的列绑定在适当的变量上。 60. 3.取得行 61. /3.检查结果记录(如果有的话) 62. SQLExecDirect(hstmt1,sql3,19); 63. charlist5; 64. SQLBindCol(hstmt1,1,SQL_C_CHAR,l

33、ist,5,0); 65. do 66. retcode=SQLFetch(hstmt1); 67. if(retcode=SQL_NO_DATA) 68. break; 69. printf(%sn,list); 70. while(1); 71. /释放语句句柄 72. SQLCloseCursor(hstmt1); 73. SQLFreeHandle(SQL_HANDLE_STMT,hstmt1); 74. /4.断开数据源 75. 1.断开与数据源的连接. 76. 2.释放连接句柄. 77. 3.释放环境句柄(如果不再需要在这个环境中作更多连接) 78. SQLDisconnect(h

34、dbc1); 79. SQLFreeHandle(SQL_HANDLE_DBC,hdbc1); 80. SQLFreeHandle(SQL_HANDLE_ENV,henv); 81. return(0); 创建数据源的过程代码:#include#inlcude#include#include#include#include#define SNO_LEN 30#define NAME_LEN 50#define DEPART_LEN 100#define SSEX_LEN 5int main()/*Step 1 定义句柄和变量 */以king开头的表示的是连接KingbaseES的变量/以ser

35、ver开头的表示的是连接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 建立

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 单元课程

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁