日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

C语言与sqlserver数据库

發(fā)布時間:2025/3/14 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言与sqlserver数据库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C語言與sqlserver數據庫 原文:C語言與sqlserver數據庫

1.使用C語言來操作SQL SERVER數據庫,采用ODBC開放式數據庫連接進行數據的添加,修改,刪除,查詢等操作。
?step1:啟動SQLSERVER服務,例如:HNHJ,開始菜單 ->運行 ->net start mssqlserver
?step2:打開企業(yè)管理器,建立數據庫test,在test庫中建立test表(a varchar(200),b varchar(200))
?step3:建立系統(tǒng)DSN,開始菜單 ->運行 ->odbcad32,
??添加->SQL SERVER
?名稱:csql,服務器:HNHJ
?使用用戶使用登錄ID和密碼的SQLSERVER驗證,登錄ID:sa,密碼:
??更改默認的數據庫為:test
?...
?測試數據源,測試成功,即DNS添加成功。

2.cpp文件完整代碼

//##########################save.cpp##########################

C代碼
  • #include?<stdio.h>??? ??
  • #include?<string.h>??? ??
  • #include?<windows.h>??? ??
  • #include?<sql.h>??? ??
  • #include?<sqlext.h>??? ??
  • #include?<sqltypes.h>??? ??
  • #include?<odbcss.h>??? ??
  • ??
  • SQLHENV?henv?=?SQL_NULL_HENV;??? ??
  • SQLHDBC?hdbc1?=?SQL_NULL_HDBC;??? ??
  • SQLHSTMT?hstmt1?=?SQL_NULL_HSTMT;??? ??
  • ??
  • /* ?
  • ????cpp文件功能說明: ?
  • ????1.數據庫操作中的添加,修改,刪除,主要體現在SQL語句上 ?
  • ????2.采用直接執(zhí)行方式和參數預編譯執(zhí)行方式兩種 ?
  • */??
  • int?main(){??? ??
  • ????RETCODE?retcode;??? ??
  • ????UCHAR???szDSN[SQL_MAX_DSN_LENGTH+1]???=???"csql",??? ??
  • ????????????szUID[MAXNAME]???=???"sa",??? ??
  • ????????????szAuthStr[MAXNAME]???=???"";?? ??
  • ????//SQL語句 ??
  • ????????//直接SQL語句 ??
  • ????UCHAR???sql[37]?=?"insert?into?test?values('aaa','100')"; ??
  • ????????//預編譯SQL語句 ??
  • ????UCHAR???pre_sql[29]?=?"insert?into?test?values(?,?)"; ??
  • ????//1.連接數據源 ??
  • ????????//1.環(huán)境句柄 ??
  • ????retcode???=???SQLAllocHandle???(SQL_HANDLE_ENV,???NULL,???&henv);??? ??
  • ????retcode???=???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)???)???{????? ??
  • ????????printf("連接失敗!/n"); ??
  • ????}???else???{??? ??
  • ????????//2.創(chuàng)建并執(zhí)行一條或多條SQL語句 ??
  • ????????/* ?
  • ????????1.分配一個語句句柄(statement?handle) ?
  • ????????2.創(chuàng)建SQL語句 ?
  • ????????3.執(zhí)行語句 ?
  • ????????4.銷毀語句 ?
  • ????????*/??
  • ????????retcode???=???SQLAllocHandle(SQL_HANDLE_STMT,???hdbc1,???&hstmt1);??? ??
  • ????????//第一種方式 ??
  • ????????//直接執(zhí)行 ??
  • ????????//添加操作 ??
  • ????????//SQLExecDirect?(hstmt1,sql,37); ??
  • ???????? ??
  • ????????//第二種方式 ??
  • ????????//綁定參數方式 ??
  • ????????char?a[200]="bbb"; ??
  • ????????char?b[200]="200"; ??
  • ????????SQLINTEGER???p???=???SQL_NTS; ??
  • ????????//1預編譯 ??
  • ????????SQLPrepare(hstmt1,pre_sql,29);?//第三個參數與數組大小相同,而不是數據庫列相同 ??
  • ????????//2綁定參數值 ??
  • ????????SQLBindParameter(hstmt1,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?執(zhí)行 ??
  • ????????SQLExecute(hstmt1); ??
  • ???????? ??
  • ????????printf("操作成功!"); ??
  • ????????//釋放語句句柄 ??
  • ????????SQLCloseCursor?(hstmt1); ??
  • ????????SQLFreeHandle?(SQL_HANDLE_STMT,?hstmt1); ??
  • ???? ??
  • ????}??? ??
  • ????//3.斷開數據源 ??
  • ????/* ?
  • ?????1.斷開與數據源的連接. ?
  • ?????2.釋放連接句柄. ?
  • ?????3.釋放環(huán)境句柄?(如果不再需要在這個環(huán)境中作更多連接) ?
  • ????*/??
  • ????SQLDisconnect(hdbc1);???? ??
  • ????SQLFreeHandle(SQL_HANDLE_DBC,?hdbc1);??? ??
  • ????SQLFreeHandle(SQL_HANDLE_ENV,?henv);??? ??
  • ????return(0);??? ??
  • }?????
  • #include <stdio.h> #include <string.h> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <sqltypes.h> #include <odbcss.h> SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; /*cpp文件功能說明:1.數據庫操作中的添加,修改,刪除,主要體現在SQL語句上2.采用直接執(zhí)行方式和參數預編譯執(zhí)行方式兩種 */ int main(){ RETCODE retcode; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = ""; //SQL語句//直接SQL語句UCHAR sql[37] = "insert into test values('aaa','100')";//預編譯SQL語句UCHAR pre_sql[29] = "insert into test values(?,?)";//1.連接數據源//1.環(huán)境句柄retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = 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) ) { printf("連接失敗!/n");} else { //2.創(chuàng)建并執(zhí)行一條或多條SQL語句/*1.分配一個語句句柄(statement handle)2.創(chuàng)建SQL語句3.執(zhí)行語句4.銷毀語句*/retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); //第一種方式//直接執(zhí)行//添加操作//SQLExecDirect (hstmt1,sql,37);//第二種方式//綁定參數方式char a[200]="bbb";char b[200]="200";SQLINTEGER p = SQL_NTS;//1預編譯SQLPrepare(hstmt1,pre_sql,29); //第三個參數與數組大小相同,而不是數據庫列相同//2綁定參數值SQLBindParameter(hstmt1,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 執(zhí)行SQLExecute(hstmt1);printf("操作成功!");//釋放語句句柄SQLCloseCursor (hstmt1);SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);} //3.斷開數據源/*1.斷開與數據源的連接.2.釋放連接句柄.3.釋放環(huán)境句柄 (如果不再需要在這個環(huán)境中作更多連接)*/SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0); }

    ?

    //##########################list.cpp##########################

    C代碼
  • #include?<stdio.h>??? ??
  • #include?<string.h>??? ??
  • #include?<windows.h>??? ??
  • #include?<sql.h>??? ??
  • #include?<sqlext.h>??? ??
  • #include?<sqltypes.h>??? ??
  • #include?<odbcss.h>??? ??
  • ??
  • SQLHENV?henv?=?SQL_NULL_HENV;??? ??
  • SQLHDBC?hdbc1?=?SQL_NULL_HDBC;??? ??
  • SQLHSTMT?hstmt1?=?SQL_NULL_HSTMT;??? ??
  • ??
  • /* ?
  • ????查詢SQLSERVER數據庫,1.條件查詢,2.直接查詢全部 ?
  • */??
  • int?main(){??? ??
  • ????RETCODE?retcode;??? ??
  • ????UCHAR???szDSN[SQL_MAX_DSN_LENGTH+1]???=???"csql",??? ??
  • ????????????szUID[MAXNAME]???=???"sa",??? ??
  • ????????????szAuthStr[MAXNAME]???=???"";?? ??
  • ????UCHAR???sql1[39]?=?"select?b?from?test?where?a?=?'aaa'"; ??
  • ????UCHAR???sql2[35]?=?"select?b?from?test?where?a?=???"; ??
  • ????UCHAR???sql3[19]?=?"select?b?from?test"; ??
  • ???? ??
  • ????retcode???=???SQLAllocHandle???(SQL_HANDLE_ENV,???NULL,???&henv);??? ??
  • ????retcode???=???SQLSetEnvAttr(henv,???SQL_ATTR_ODBC_VERSION,??? ??
  • ??????????????????(SQLPOINTER)SQL_OV_ODBC3,??? ??
  • ??????????????????SQL_IS_INTEGER);???? ??
  • ????retcode???=???SQLAllocHandle(SQL_HANDLE_DBC,???henv,???&hdbc1);??? ??
  • ????//1.連接數據源 ??
  • ????retcode???=???SQLConnect(hdbc1,???szDSN,???4,???szUID,???2,???szAuthStr,???0);???? ??
  • ????if???(???(retcode???!=???SQL_SUCCESS)???&&???(retcode???!=???SQL_SUCCESS_WITH_INFO)???)???{??? ??
  • ????????printf("連接失敗!"); ??
  • ????}???else???{??? ??
  • ????????//2.創(chuàng)建并執(zhí)行一條或多條SQL語句 ??
  • ????????/* ?
  • ????????1.分配一個語句句柄(statement?handle) ?
  • ????????2.創(chuàng)建SQL語句 ?
  • ????????3.執(zhí)行語句 ?
  • ????????4.銷毀語句 ?
  • ????????*/??
  • ????????retcode???=???SQLAllocHandle(SQL_HANDLE_STMT,???hdbc1,???&hstmt1);??? ??
  • ????????//第一種方式 ??
  • ????????/* ?
  • ????????//直接執(zhí)行 ?
  • ????????SQLExecDirect?(hstmt1,sql1,39); ?
  • ????????char?list[5]; ?
  • ????????SQLBindCol(hstmt1,?1,?SQL_C_CHAR,?list,?5,?0); ?
  • ????????SQLFetch(hstmt1); ?
  • ????????printf("%s/n",list); ?
  • ????????*/??
  • ???????? ??
  • ????????//第二種方式 ??
  • ????????/* ?
  • ????????//綁定參數方式 ?
  • ????????char?a[200]="aaa"; ?
  • ????????SQLINTEGER???p???=???SQL_NTS; ?
  • ????????//1.預編譯 ?
  • ????????SQLPrepare(hstmt1,sql2,35);?//第三個參數與數組大小相同,而不是數據庫列相同 ?
  • ????????//2.綁定參數值 ?
  • ????????SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p); ?
  • ????????//3.執(zhí)行 ?
  • ????????SQLExecute(hstmt1); ?
  • ????????char?list[5]; ?
  • ????????SQLBindCol(hstmt1,?1,?SQL_C_CHAR,?list,?5,?0); ?
  • ????????SQLFetch(hstmt1); ?
  • ????????printf("%s/n",list); ?
  • ????????*/??
  • ??
  • ????????//第三種方式全部輸出 ??
  • ????????/* ?
  • ????????1.確認一個結果集是否可用。 ?
  • ????????2.將結果集的列綁定在適當的變量上。 ?
  • ????????3.取得行 ?
  • ????????*/??
  • ????????//3.檢查結果記錄(如果有的話) ??
  • ????????SQLExecDirect?(hstmt1,sql3,19); ??
  • ????????char?list[5]; ??
  • ????????SQLBindCol(hstmt1,?1,?SQL_C_CHAR,?list,?5,?0); ??
  • ????????do{ ??
  • ????????????retcode?=?SQLFetch(hstmt1); ??
  • ????????????if(retcode?==?SQL_NO_DATA){ ??
  • ????????????????break; ??
  • ????????????} ??
  • ????????????printf("%s/n",list); ??
  • ????????}while(1); ??
  • ???????? ??
  • ????????//釋放語句句柄 ??
  • ????????SQLCloseCursor?(hstmt1); ??
  • ????????SQLFreeHandle?(SQL_HANDLE_STMT,?hstmt1); ??
  • ???? ??
  • ????}??? ??
  • ? ??
  • ????//4.斷開數據源 ??
  • ????/* ?
  • ?????1.斷開與數據源的連接. ?
  • ?????2.釋放連接句柄. ?
  • ?????3.釋放環(huán)境句柄?(如果不再需要在這個環(huán)境中作更多連接) ?
  • ????*/??
  • ????SQLDisconnect(hdbc1);???? ??
  • ????SQLFreeHandle(SQL_HANDLE_DBC,?hdbc1);??? ??
  • ????SQLFreeHandle(SQL_HANDLE_ENV,?henv);??? ??
  • ????return(0);??? ??
  • }????
  • #include <stdio.h> #include <string.h> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <sqltypes.h> #include <odbcss.h> SQLHENV henv = SQL_NULL_HENV; SQLHDBC hdbc1 = SQL_NULL_HDBC; SQLHSTMT hstmt1 = SQL_NULL_HSTMT; /*查詢SQLSERVER數據庫,1.條件查詢,2.直接查詢全部 */ int main(){ RETCODE retcode; UCHAR szDSN[SQL_MAX_DSN_LENGTH+1] = "csql", szUID[MAXNAME] = "sa", szAuthStr[MAXNAME] = ""; UCHAR sql1[39] = "select b from test where a = 'aaa'";UCHAR sql2[35] = "select b from test where a = ? ";UCHAR sql3[19] = "select b from test";retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER); retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1); //1.連接數據源retcode = SQLConnect(hdbc1, szDSN, 4, szUID, 2, szAuthStr, 0); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { printf("連接失敗!");} else { //2.創(chuàng)建并執(zhí)行一條或多條SQL語句/*1.分配一個語句句柄(statement handle)2.創(chuàng)建SQL語句3.執(zhí)行語句4.銷毀語句*/retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc1, &hstmt1); //第一種方式/*//直接執(zhí)行SQLExecDirect (hstmt1,sql1,39);char list[5];SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);SQLFetch(hstmt1);printf("%s/n",list);*///第二種方式/*//綁定參數方式char a[200]="aaa";SQLINTEGER p = SQL_NTS;//1.預編譯SQLPrepare(hstmt1,sql2,35); //第三個參數與數組大小相同,而不是數據庫列相同//2.綁定參數值SQLBindParameter(hstmt1,1,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,200,0,&a,0,&p);//3.執(zhí)行SQLExecute(hstmt1);char list[5];SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);SQLFetch(hstmt1);printf("%s/n",list);*///第三種方式全部輸出/*1.確認一個結果集是否可用。2.將結果集的列綁定在適當的變量上。3.取得行*///3.檢查結果記錄(如果有的話)SQLExecDirect (hstmt1,sql3,19);char list[5];SQLBindCol(hstmt1, 1, SQL_C_CHAR, list, 5, 0);do{retcode = SQLFetch(hstmt1);if(retcode == SQL_NO_DATA){break;}printf("%s/n",list);}while(1);//釋放語句句柄SQLCloseCursor (hstmt1);SQLFreeHandle (SQL_HANDLE_STMT, hstmt1);} //4.斷開數據源/*1.斷開與數據源的連接.2.釋放連接句柄.3.釋放環(huán)境句柄 (如果不再需要在這個環(huán)境中作更多連接)*/SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLFreeHandle(SQL_HANDLE_ENV, henv); return(0); }

    ?

    3.總結:ODBC數據庫操作與JDBC步驟上類似,可以融匯貫通來學習

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

    posted on 2014-12-09 13:18 NET未來之路 閱讀(...) 評論(...) 編輯 收藏

    轉載于:https://www.cnblogs.com/lonelyxmas/p/4153030.html

    總結

    以上是生活随笔為你收集整理的C语言与sqlserver数据库的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。