C語(yǔ)言中操作sqlserver數(shù)據(jù)庫(kù)案例教程
本文使用c語(yǔ)言來(lái)對(duì)sql server數(shù)據(jù)庫(kù)進(jìn)行操作,實(shí)現(xiàn)通過(guò)程序來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行增刪改查操作。
操作系統(tǒng):windows 10 實(shí)驗(yàn)平臺(tái):vs2012 + sql server 2008
ODBC簡(jiǎn)介:開(kāi)放數(shù)據(jù)庫(kù)連接(Open Database Connectivity,ODBC),主要的功能是提供了一組用于數(shù)據(jù)庫(kù)訪問(wèn)的編程接口,其主要的特點(diǎn)是,如果應(yīng)用程序使用ODBC做數(shù)據(jù)源,那么這個(gè)應(yīng)用程序與所使用的數(shù)據(jù)庫(kù)或數(shù)據(jù)庫(kù)引擎是無(wú)關(guān)的,為應(yīng)用程序的跨平臺(tái)和可移植奠定了基礎(chǔ)。
創(chuàng)建ODBC數(shù)據(jù)源:控制面板——管理工具——ODBC數(shù)據(jù)源(32位)
可以看到,這里存在三種類(lèi)型的DSN(數(shù)據(jù)源名),其中:
用戶(hù)DSN:只允創(chuàng)建該DSN的用戶(hù)使用該數(shù)據(jù)源;
系統(tǒng)DSN:所有登陸該服務(wù)器的用戶(hù)都能使用該數(shù)據(jù)源;
文件DSN:配置信息保存在文件中,所有登陸的用戶(hù)均可使用;
在本實(shí)驗(yàn)中,采用系統(tǒng)DSN:
點(diǎn)擊添加,然后選擇SQL Server
然后輸入數(shù)據(jù)源的名稱(chēng)和所在服務(wù)器,我們的數(shù)據(jù)庫(kù)是安裝在本機(jī)上的。
選擇以sql server用戶(hù)的方式進(jìn)行驗(yàn)證,下圖所示:
這里可以設(shè)置默認(rèn)連接的數(shù)據(jù)庫(kù),保持不變,使用master作為默認(rèn)的數(shù)據(jù)庫(kù)。
然后點(diǎn)擊下一步,然后完成,完成后可以測(cè)試一下。
這就完成了ODBC數(shù)據(jù)源的創(chuàng)建。
程序測(cè)試,數(shù)據(jù)庫(kù)中已包含一個(gè)叫做stu_info的數(shù)據(jù)庫(kù),且其中有一張student的學(xué)生信息表,其包含的字段信息如下:
程序設(shè)計(jì)如下
#include<stdio.h> #include<windows.h> #include<sql.h> #include<sqlext.h> #include<sqltypes.h> int main() { SQLRETURN ret; SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt; ret=SQLAllocHandle(SQL_HANDLE_ENV,NULL,&henv);//申請(qǐng)環(huán)境句柄 ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER); ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申請(qǐng)數(shù)據(jù)庫(kù)連接句柄 ret=SQLConnect(hdbc,(SQLCHAR*)"data_test",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"12345678",SQL_NTS); /*data_test為配置的ODBC數(shù)據(jù)源名稱(chēng),這里根據(jù)自己的配置進(jìn)行修改*/ if(!(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO)) { printf("連接數(shù)據(jù)庫(kù)失敗!\n"); return -1; } ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt); /*執(zhí)行sql語(yǔ)句*/ SQLCHAR sql1[]="use stu_info"; SQLCHAR sql2[]="select * from student"; ret=SQLExecDirect(hstmt,sql1,SQL_NTS); ret=SQLExecDirect(hstmt,sql2,SQL_NTS); if(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO) { SQLCHAR str1[50],str2[50],str3[50],str4[50],str5[50],str6[50]; SQLINTEGER len_str1, len_str2, len_str3, len_str4, len_str5, len_str6; while(SQLFetch(hstmt)!=SQL_NO_DATA) { SQLGetData(hstmt,1,SQL_C_CHAR,str1,50,&len_str1); //獲取第一列數(shù)據(jù) SQLGetData(hstmt,2,SQL_C_CHAR,str2,50,&len_str2); SQLGetData(hstmt,3,SQL_C_CHAR,str3,50,&len_str3); SQLGetData(hstmt,4,SQL_C_CHAR,str4,50,&len_str4); SQLGetData(hstmt,5,SQL_C_CHAR,str5,50,&len_str5); SQLGetData(hstmt,6,SQL_C_CHAR,str6,50,&len_str6); printf("%s\t%s\t%s\t%s\t%s\t%s\n",str1,str2,str3,str4,str5,str6); } } SQLFreeHandle(SQL_HANDLE_DBC,hdbc);//釋放連接句柄 SQLFreeHandle(SQL_HANDLE_ENV,henv);//釋放環(huán)境句柄 return 0; }
需要說(shuō)明的是,在多數(shù)環(huán)境中,代碼會(huì)報(bào)錯(cuò),報(bào)錯(cuò)信息如下:(SQLCHAR*)無(wú)法與(SQLWCHAR*)兼容,于是有人可能會(huì)想到,直接強(qiáng)轉(zhuǎn)為(SQLWCHAR*),但是依然在SQLConnect函數(shù)處報(bào)錯(cuò),無(wú)法連接上數(shù)據(jù)庫(kù),這時(shí)需要修改字符集,配置為多字節(jié)字符集,操作如下:
到此這篇關(guān)于C語(yǔ)言中操作sqlserver數(shù)據(jù)庫(kù)案例教程的文章就介紹到這了,更多相關(guān)C語(yǔ)言操作sqlserver內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
優(yōu)秀程序員必須知道的20個(gè)位運(yùn)算技巧
掌握簡(jiǎn)單的位運(yùn)算技巧還是必要的,所以今天寫(xiě)這篇文章把我積累的一些位運(yùn)算技巧分享給大家,這些技巧不會(huì)是如求“1的數(shù)目”的技巧,是最基本的一行位運(yùn)算技巧2013-09-09如何在 clion 運(yùn)行多個(gè) main 函數(shù)(方法詳解)
這篇文章主要介紹了如何在 clion 運(yùn)行多個(gè) main 函數(shù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08C語(yǔ)言中pthread_exit和pehread_join的使用
pthread_exit用于強(qiáng)制退出一個(gè)線程,pthread_join用于阻塞等待線程退出,獲取線程退出狀態(tài),本文主要介紹了C語(yǔ)言中pthread_exit和pehread_join函數(shù)的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02C語(yǔ)言中隨機(jī)數(shù)rand()函數(shù)詳解
大家好,本篇文章主要講的是C語(yǔ)言中隨機(jī)數(shù)rand()函數(shù)詳解,感興趣的同學(xué)感快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下2022-02-02新舊MFC版本實(shí)現(xiàn)CEdit透明的2種方法的實(shí)例代碼
新舊MFC版本實(shí)現(xiàn)CEdit透明的2種方法的實(shí)例代碼,需要的朋友可以參考一下2013-03-03關(guān)于STL中vector容器的一些總結(jié)
vector作為STL提供的標(biāo)準(zhǔn)容器之一,是經(jīng)常要使用的,有很重要的地位,并且使用起來(lái)也是灰常方便。vector又被稱(chēng)為向量,vector可以形象的描述為長(zhǎng)度可以動(dòng)態(tài)改變的數(shù)組,功能和數(shù)組較為相似2013-09-09C++實(shí)現(xiàn)LeetCode(75.顏色排序)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(75.顏色排序),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07