C語言連接SQL數(shù)據(jù)庫例子_第1頁
C語言連接SQL數(shù)據(jù)庫例子_第2頁
C語言連接SQL數(shù)據(jù)庫例子_第3頁
C語言連接SQL數(shù)據(jù)庫例子_第4頁
C語言連接SQL數(shù)據(jù)庫例子_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、.連接到 SAMPLE 數(shù)據(jù)庫,查詢 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;上面是一個簡單的靜態(tài)嵌入SQL 語句的應(yīng)用程序。它包括了嵌入SQL 的主要部分:(1 )中的 includeSQLCA語句定義并描述了SQLCA 的結(jié)構(gòu)。 SQLCA 用于應(yīng)用程序和數(shù)據(jù)庫之間的通訊,其中的 SQLCODE返回 SQL 語句執(zhí)行后的結(jié)果狀態(tài)。(2 )在 BEGINDECLARESECTION和 ENDDECLARESECTION之間定義了宿主變量。宿主變量可被 SQL語句引用,也可以被C

3、語言語句引用。它用于將程序中的數(shù)據(jù)通過SQL 語句傳給數(shù)據(jù)庫管理器,或從數(shù)據(jù)庫管理器接收查詢的結(jié)果。在SQL 語句中,主變量前均有 “:”標志以示區(qū)別。( 3 )在每次訪問數(shù)據(jù)庫之前必須做 CONNECT 操作,以連接到某一個數(shù)據(jù)庫上。這時,應(yīng)該保證數(shù)據(jù)庫實例已經(jīng)啟動。(4 )是一條選擇語句。它將表 employee 中的 LASTNAME 為“ JOHNSON”的行數(shù)據(jù)的 FIRSTNAME 查出,并將它放在 firstname 變量中。該語句返回一個結(jié)果。可以通過游標返回多個結(jié)果。當然,也可以包含 update、insert和 delete語句。(5 )最后斷開數(shù)據(jù)庫的連接。從上例看出,每

4、條嵌入式SQL 語句都用EXECSQL 開始,表明它是一條SQL 語句。這也是告訴預(yù)編譯器在 EXECSQL 和 “;”之間是嵌入SQL 語句。如果一條嵌入式SQL 語句占用多行,在C 程序中可以用續(xù)行符 “”。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=Val;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數(shù)據(jù)庫1. 使用 C 語言來操作 SQL SERVER數(shù)據(jù)庫 , 采用 ODBC開放式數(shù)據(jù)庫連接進行數(shù)據(jù)的添加 , 修改 , 刪除 , 查詢等操作。step1: 啟動 SQLSERVER服務(wù) , 例如 :HNHJ,開始菜單 - 運行 -net startmssqlserverstep2: 打開企業(yè)管理器 , 建立數(shù)據(jù)庫 test, 在 test 庫中建立 test 表(a varchar(20

16、0),b varchar(200)step3: 建立系統(tǒng) DSN,開始菜單 - 運行 -odbcad32,添加 -SQL SERVER名稱: csql, 服務(wù)器: HNHJ使用用戶使用登錄ID 和密碼的 SQLSERVER驗證 , 登錄 ID:sa, 密碼 :更改默認的數(shù)據(jù)庫為 :test.測試數(shù)據(jù)源,測試成功,即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.數(shù)據(jù)庫操作中的添加,修改,刪除,主要體現(xiàn)在SQL 語句上16. 2.采用直接執(zhí)行方式和參數(shù)預(yù)編譯執(zhí)行方式兩種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. /預(yù)編譯 SQL 語句27.UCHARpre_sql29 = insert into test values(?,?);28. /1.連接數(shù)據(jù)源29. /1. 環(huán)境句柄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. 創(chuàng)建并執(zhí)行一條或多條 SQL 語句42

20、. /*43. 1.分配一個語句句柄 (statement handle)44. 2.創(chuàng)建 SQL 語句45. 3.執(zhí)行語句46. 4.銷毀語句.47. */48. retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);49. /第一種方式50. /直接執(zhí)行51. /添加操作52. /SQLExecDirect (hstmt1,sql,37);53.54. /第二種方式55. /綁定參數(shù)方式56. char a200=bbb;57. char b200=200;58. SQLINTEGER p = SQL_NTS;59. /1 預(yù)編

21、譯60. SQLPrepare(hstmt1,pre_sql,29); / 第三個參數(shù)與數(shù)組大小相同,而不是數(shù)據(jù)庫列相同61. /2 綁定參數(shù)值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 執(zhí)行65. SQLExecute(hstmt1);66.67. printf( 操作成功 !);68. /釋放語句

22、句柄69. SQLCloseCursor (hstmt1);70. SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);71.72. 73. /3.斷開數(shù)據(jù)源74. /*75. 1.斷開與數(shù)據(jù)源的連接 .76. 2.釋放連接句柄 .77. 3.釋放環(huán)境句柄 (如果不再需要在這個環(huán)境中作更多連接)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 數(shù)據(jù)庫 ,1.條件查詢 ,2.直接查詢?nèi)?5. */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.連接數(shù)據(jù)源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. 創(chuàng)建并執(zhí)行一條或多條 SQL 語句36. /*37. 1.分配一個語句句柄 (statement handle)38. 2.創(chuàng)建 SQL 語句39. 3.執(zhí)行語句40. 4.銷毀語句41. */42. retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1);43. /第一種方式.44. /*45. /直接執(zhí)行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. /綁定參數(shù)方式56. char a200=aaa;57. SQLINTEGER p = SQL_NTS;58. /1. 預(yù)編譯59. SQLPrepare(hstmt1,sql2,35); / 第三個參數(shù)與數(shù)組大小相同,而不是數(shù)據(jù)庫列相同60. /2. 綁定參數(shù)值61. SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,2 00,0,&a,0,&p);62. /3. 執(zhí)

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.確認一個結(jié)果集是否可用。73. 2.將結(jié)果集的列綁定在適當?shù)淖兞可稀?4. 3.取得行75. */76. /3. 檢查結(jié)果記錄 (如果有的話 )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.斷開數(shù)據(jù)源95. /*96. 1.斷開與數(shù)據(jù)源的連接 .97. 2.釋放連接句柄 .98

30、. 3.釋放環(huán)境句柄 (如果不再需要在這個環(huán)境中作更多連接)99. */100. SQLDisconnect(hdbc1);101. SQLFreeHandle(SQL_HANDLE_DBC, hdbc1);102. SQLFreeHandle(SQL_HANDLE_ENV, henv);103. return(0);104. 創(chuàng)建數(shù)據(jù)源的過程代碼:#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 初始化環(huán)境 */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 兩種方式執(zhí)行語句*/* 預(yù)編譯帶有參數(shù)的語句*/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=SQLBindParameter(serverhstmt,2,SQL_PARAM_INPUT,SQL_C_CHAR, SQL_CHAR,SNAME_LEN,0,sName,0,&cbName)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論