收藏 分享(赏)

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

上传人:精品资料 文档编号:11045439 上传时间:2020-02-05 格式:DOC 页数:13 大小:130KB
下载 相关 举报
C语言连接SQL数据库例子.doc_第1页
第1页 / 共13页
C语言连接SQL数据库例子.doc_第2页
第2页 / 共13页
C语言连接SQL数据库例子.doc_第3页
第3页 / 共13页
C语言连接SQL数据库例子.doc_第4页
第4页 / 共13页
C语言连接SQL数据库例子.doc_第5页
第5页 / 共13页
点击查看更多>>
资源描述

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 SELE

2、CT 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

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

4、结果。可以通过游标返回多个结果。当然,也可以包含 update、insert 和 delete 语句。 (5)最后断开数据库的连接。 从上例看出,每条嵌入式 SQL 语句都用 EXEC SQL 开始,表明它是一条 SQL 语句。这也是告诉预编译器在 EXEC SQL 和“;” 之间是嵌入 SQL 语句。如果一条嵌入式 SQL 语句占用多行,在 C 程序中可以用续行符“”。 c 语言用 vc 连接 sql server 20002009/11/02 09:34 sql server 1.提取单条记录/#import “C:Program FilesCommon FilesSystemADOmsa

5、do15.dll“ /no_namespace,rename(“EOF“,“adoEOF“),named_guidsCoInitialize(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(

6、Connection);m_pConnection-Open(varSource,“,“,adModeUnknow);_RecordsetPtr 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-GetFiel

7、ds()-GetCount();long i=0;try m_pSet-MoveFirst();if(!m_pSet-adoEOF)for(i=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);2.单值比较/#import “C:Program FilesCommon

8、FilesSystemADOmsado15.dll“ /no_namespace,rename(“EOF“,“adoEOF“),named_guidsCoInitialize(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_pCo

9、nnection(_uuidof(Connection);m_pConnection-Open(varSource,“,“,adModeUnknow);_RecordsetPtr 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;try m_pSet-MoveFirst

10、();if(!m_pSet-adoEOF)var=m_pSet-GetCollect(long)0);var.ChangeType(VT_I2);int %3=var.intVal;if(%3=%4)%5/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

11、,rename(“EOF“,“adoEOF“),named_guidsCoInitialize(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_pConnecti

12、on-Open(varSource,“,“,adModeUnknow);/打开属性为默认(adModeRead(只读),adModeWrite(可写),adModeReadWrite(可读写)等)_RecordsetPtr 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(SUCCE

13、SSED(hr)/表打开成功FieldsPtr p_fields=m_pSet-Fields;FieldPtr p_field;_variant_t var_index;LPCSTR field_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-Del

14、eteAllItems();for(index=0;indexItemvar_index;bstr_field_name=p_field-GetName();field_name=(LPCSTR)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,12

15、2);/pList-SetTextColor(RGB(0,0,200);while(!m_pSet-adoEOF)pList-Insert(i,atoi(i);for(int j=0;jGetCollect(long)j);pList-SetItemText(i,j,vCol);m_pSet-MoveNext();i+;CoUninitialize(NULL); C 语言与 SQL SERVER 数据库1.使用 C 语言来操作 SQL SERVER 数据库,采用 ODBC 开放式数据库连接进行数据的添加,修改,删除,查询等操作。step1:启动 SQLSERVER 服务,例如:HNHJ,开始菜

16、单 -运行 -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 2. #include 3. #

17、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. cpp 文件功能说明: 15. 1.数据库操作中的添加,修改,删除,主要体现在 SQL 语句上 16. 2.采用直接执行方式和参数预编译执行方式两种 17. */ 18. int main() 19. RETCODE retcode; 20

18、. UCHAR szDSNSQL_MAX_DSN_LENGTH+1 = “csql“, 21. szUIDMAXNAME = “sa“, 22. szAuthStrMAXNAME = “; 23. /SQL 语句 24. /直接 SQL 语句 25. UCHAR sql37 = “insert into test values(aaa,100)“; 26. /预编译 SQL 语句 27. UCHAR pre_sql29 = “insert into test values(?,?)“; 28. /1.连接数据源 29. /1.环境句柄 30. retcode = SQLAllocHandle

19、(SQL_HANDLE_ENV, NULL, 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, 36. retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); 37. /判断连接是否成功 38. if ( (retcode != SQL_

20、SUCCESS) 40. else 41. /2.创建并执行一条或多条 SQL 语句 42. /* 43. 1.分配一个语句句柄(statement handle) 44. 2.创建 SQL 语句 45. 3.执行语句 46. 4.销毁语句 47. */ 48. retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, 49. /第一种方式 50. /直接执行 51. /添加操作 52. /SQLExecDirect (hstmt1,sql,37); 53. 54. /第二种方式 55. /绑定参数方式 56. char a200=“bbb“; 57.

21、char b200=“200“; 58. SQLINTEGER p = 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, 63. SQLBindParameter(hstmt1,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0, 64. /3 执行 65. SQLExecute(h

22、stmt1); 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. SQLFreeHan

23、dle(SQL_HANDLE_ENV, henv); 82. return(0); 83. /#list.cpp#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.直接查询

24、全部 15. */ 16. int main() 17. RETCODE retcode; 18. 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“; 24. 25.

25、 retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, 26. retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, 27. (SQLPOINTER)SQL_OV_ODBC3, 28. SQL_IS_INTEGER); 29. retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, 30. /1.连接数据源 31. retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); 32. if ( (re

26、tcode != SQL_SUCCESS) 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, 43. /第一种方式 44. /* 45. /直接执行 46. SQLExecDirect (hstmt1,sql1,39); 47. char list5; 48. SQLBindCol(hstmt1, 1,

27、SQL_C_CHAR, list, 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,SQ

28、L_CHAR,200,0, 62. /3.执行 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,

29、sql3,19); 78. char list5; 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.

30、 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#inlcude#include#include#include#include#define SNO_LEN

31、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,sSexS

32、SEX_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,ret=SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,ret=SQLSetEnvAttr(kinghenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3

33、,0);ret=SQLSetEnvAttr(serverhenv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,0);/*Step 3 建立连接 */ret=SQLAllocHandle(SQL_HANDLE_DBC,kinghenv,ret=SQLAllocHandle(SQL_HANDLE_DBC,serverhenv,ret=SQLConnect(kinghdbc,“KingbaseES ODBC“,SQL_NTS,“SYSTEM“,SQL_NTS,“MANAGER“,SQL_NTS);if(!SQL_SUCCEEDED(ret)return -1;

34、 /连接失败时返回错误值;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,ret=SQLSetStmtAttr(kinghstmt,SQL_ATTR_ROW_BIND_TYPE(SQLPOINTER) SQL_BIND_BY_COLUMN,SQL_IS_INTEGER);ret=SQLA

35、llocHandle(SQL_HANDLE_STMT,serverhdbc,/*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,sS

36、no,0,ret=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,SNAME_LEN,0,sName,0,ret=SQLBindParameter(serverhstmt,3,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2,0,sSex,0,ret=SQLBindParameter(serverhstmt,4,SQL_PARAM_INPUT,SQL_C_LONG,SQL_INTEGER,0,0,ret=SQLBindParameter(serverhstmt,5,SQL_PARAM

37、_INPUT,SQL_C_CHAR,SQL_CHAR,DEPART_LEN,0,sDepart,0,/*执行 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,ret=SQLBindCol(kinghstmt,2,SQL_C_CHAR,sName,NAME_LEN,ret=SQLBindCol(kinghstmt,3

38、,SQL_C_CHAR,sSex,SSEX_LEN,ret=SQLBindCol(kinghstmt,4,SQL_C_LONG,ret=SQLBindCol(kinghstmt,5,SQL_C_CHAR,sDepart,DEPART_LEN,/*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_DBCserverhdbc);SQLFreeHanlde(SQL_HANDLE_ENV,serverhenv);return 0;

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报