運(yùn)行->netstartmssqlserverstep2:打開企業(yè)管理器,建立數(shù)據(jù)庫test,在test庫中建立test表(avarchar(200),bvarchar(200))step3:建立系統(tǒng)DSN,開始菜單->運(yùn)行->odbcad" />

日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

C語言與sqlserver數(shù)據(jù)庫

系統(tǒng) 2908 0
原文: C語言與sqlserver數(shù)據(jù)庫

1.使用C語言來操作SQL SERVER數(shù)據(jù)庫,采用ODBC開放式數(shù)據(jù)庫連接進(jìn)行數(shù)據(jù)的添加,修改,刪除,查詢等操作。
?step1:啟動SQLSERVER服務(wù),例如:HNHJ,開始菜單 ->運(yùn)行 ->net start mssqlserver
?step2:打開企業(yè)管理器,建立數(shù)據(jù)庫test,在test庫中建立test表(a varchar(200),b varchar(200))
?step3:建立系統(tǒng)DSN,開始菜單 ->運(yùn)行 ->odbcad32,
??添加->SQL SERVER
?名稱:csql,服務(wù)器:HNHJ
?使用用戶使用登錄ID和密碼的SQLSERVER驗(yàn)證,登錄ID:sa,密碼:
??更改默認(rèn)的數(shù)據(jù)庫為:test
?...
?測試數(shù)據(jù)源,測試成功,即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. SQLHENV?henv?=?SQL_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 ???szDSN[SQL_MAX_DSN_LENGTH+1]???=??? "csql" ,??? ??
  21. ????????????szUID[MAXNAME]???=??? "sa" ,??? ??
  22. ????????????szAuthStr[MAXNAME]???=??? "" ;?? ??
  23. ???? //SQL語句 ??
  24. ???????? //直接SQL語句 ??
  25. ???? UCHAR ???sql[37]?=? "insert?into?test?values('aaa','100')" ; ??
  26. ???????? //預(yù)編譯SQL語句 ??
  27. ???? UCHAR ???pre_sql[29]?=? "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,??? ??
  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.創(chuàng)建并執(zhí)行一條或多條SQL語句 ??
  42. ???????? /* ?
  43. ????????1.分配一個(gè)語句句柄(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 ?a[200]= "bbb" ; ??
  57. ???????? char ?b[200]= "200" ; ??
  58. ????????SQLINTEGER???p???=???SQL_NTS; ??
  59. ???????? //1預(yù)編譯 ??
  60. ????????SQLPrepare(hstmt1,pre_sql,29);? //第三個(gè)參數(shù)與數(shù)組大小相同,而不是數(shù)據(jù)庫列相同 ??
  61. ???????? //2綁定參數(shù)值 ??
  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?執(zhí)行 ??
  65. ????????SQLExecute(hstmt1); ??
  66. ???????? ??
  67. ????????printf( "操作成功!" ); ??
  68. ???????? //釋放語句句柄 ??
  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)境句柄?(如果不再需要在這個(gè)環(huán)境中作更多連接) ?
  78. ????*/ ??
  79. ????SQLDisconnect(hdbc1);???? ??
  80. ????SQLFreeHandle(SQL_HANDLE_DBC,?hdbc1);??? ??
  81. ????SQLFreeHandle(SQL_HANDLE_ENV,?henv);??? ??
  82. ???? return (0);??? ??
  83. }?????

?

//##########################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. 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)? ?
  15. */ ??
  16. int ?main(){??? ??
  17. ????RETCODE?retcode;??? ??
  18. ???? UCHAR ???szDSN[SQL_MAX_DSN_LENGTH+1]???=??? "csql" ,??? ??
  19. ????????????szUID[MAXNAME]???=??? "sa" ,??? ??
  20. ????????????szAuthStr[MAXNAME]???=??? "" ;?? ??
  21. ???? UCHAR ???sql1[39]?=? "select?b?from?test?where?a?=?'aaa'" ; ??
  22. ???? UCHAR ???sql2[35]?=? "select?b?from?test?where?a?=???" ; ??
  23. ???? UCHAR ???sql3[19]?=? "select?b?from?test" ; ??
  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.連接數(shù)據(jù)源 ??
  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.創(chuàng)建并執(zhí)行一條或多條SQL語句 ??
  36. ???????? /* ?
  37. ????????1.分配一個(gè)語句句柄(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?list[5]; ?
  48. ????????SQLBindCol(hstmt1,?1,?SQL_C_CHAR,?list,?5,?0); ?
  49. ????????SQLFetch(hstmt1); ?
  50. ????????printf("%s/n",list); ?
  51. ????????*/ ??
  52. ???????? ??
  53. ???????? //第二種方式 ??
  54. ???????? /* ?
  55. ????????//綁定參數(shù)方式 ?
  56. ????????char?a[200]="aaa"; ?
  57. ????????SQLINTEGER???p???=???SQL_NTS; ?
  58. ????????//1.預(yù)編譯 ?
  59. ????????SQLPrepare(hstmt1,sql2,35);?//第三個(gè)參數(shù)與數(shù)組大小相同,而不是數(shù)據(jù)庫列相同 ?
  60. ????????//2.綁定參數(shù)值 ?
  61. ????????SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p); ?
  62. ????????//3.執(zhí)行 ?
  63. ????????SQLExecute(hstmt1); ?
  64. ????????char?list[5]; ?
  65. ????????SQLBindCol(hstmt1,?1,?SQL_C_CHAR,?list,?5,?0); ?
  66. ????????SQLFetch(hstmt1); ?
  67. ????????printf("%s/n",list); ?
  68. ????????*/ ??
  69. ??
  70. ???????? //第三種方式全部輸出 ??
  71. ???????? /* ?
  72. ????????1.確認(rèn)一個(gè)結(jié)果集是否可用。 ?
  73. ????????2.將結(jié)果集的列綁定在適當(dāng)?shù)淖兞可稀? ?
  74. ????????3.取得行 ?
  75. ????????*/ ??
  76. ???????? //3.檢查結(jié)果記錄(如果有的話) ??
  77. ????????SQLExecDirect?(hstmt1,sql3,19); ??
  78. ???????? char ?list[5]; ??
  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( "%s/n" ,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. ?????3.釋放環(huán)境句柄?(如果不再需要在這個(gè)環(huán)境中作更多連接) ?
  99. ????*/ ??
  100. ????SQLDisconnect(hdbc1);???? ??
  101. ????SQLFreeHandle(SQL_HANDLE_DBC,?hdbc1);??? ??
  102. ????SQLFreeHandle(SQL_HANDLE_ENV,?henv);??? ??
  103. ???? return (0);??? ??
  104. }????

?

3. 總結(jié):ODBC數(shù)據(jù)庫操作與JDBC步驟上類似,可以融匯貫通來學(xué)習(xí)

本文來自于 http://simpledev.javaeye.com/blog/339537

C語言與sqlserver數(shù)據(jù)庫


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 新巴尔虎左旗| 即墨市| 甘孜县| 北辰区| 阿鲁科尔沁旗| 铜山县| 洛扎县| 衡水市| 东宁县| 靖安县| 贵港市| 广汉市| 广西| 石首市| 龙江县| 涿鹿县| 江永县| 阿克苏市| 万安县| 博白县| 盈江县| 金湖县| 密云县| 革吉县| 明光市| 呼玛县| 浏阳市| 拉萨市| 中宁县| 南涧| 河西区| 无锡市| 富宁县| 固安县| 瓮安县| 舞阳县| 满洲里市| 无锡市| 定西市| 德保县| 龙井市|