C語言中操作sqlserver數(shù)據(jù)庫案例教程
本文使用c語言來對sql server數(shù)據(jù)庫進行操作,實現(xiàn)通過程序來對數(shù)據(jù)庫進行增刪改查操作。
操作系統(tǒng):windows 10 實驗平臺:vs2012 + sql server 2008
ODBC簡介:開放數(shù)據(jù)庫連接(Open Database Connectivity,ODBC),主要的功能是提供了一組用于數(shù)據(jù)庫訪問的編程接口,其主要的特點是,如果應用程序使用ODBC做數(shù)據(jù)源,那么這個應用程序與所使用的數(shù)據(jù)庫或數(shù)據(jù)庫引擎是無關(guān)的,為應用程序的跨平臺和可移植奠定了基礎(chǔ)。
創(chuàng)建ODBC數(shù)據(jù)源:控制面板——管理工具——ODBC數(shù)據(jù)源(32位)

可以看到,這里存在三種類型的DSN(數(shù)據(jù)源名),其中:
用戶DSN:只允創(chuàng)建該DSN的用戶使用該數(shù)據(jù)源;
系統(tǒng)DSN:所有登陸該服務器的用戶都能使用該數(shù)據(jù)源;
文件DSN:配置信息保存在文件中,所有登陸的用戶均可使用;
在本實驗中,采用系統(tǒng)DSN:
點擊添加,然后選擇SQL Server

然后輸入數(shù)據(jù)源的名稱和所在服務器,我們的數(shù)據(jù)庫是安裝在本機上的。

選擇以sql server用戶的方式進行驗證,下圖所示:

這里可以設(shè)置默認連接的數(shù)據(jù)庫,保持不變,使用master作為默認的數(shù)據(jù)庫。

然后點擊下一步,然后完成,完成后可以測試一下。

這就完成了ODBC數(shù)據(jù)源的創(chuàng)建。
程序測試,數(shù)據(jù)庫中已包含一個叫做stu_info的數(shù)據(jù)庫,且其中有一張student的學生信息表,其包含的字段信息如下:
![]()
程序設(shè)計如下
#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);//申請環(huán)境句柄
ret=SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER)SQL_OV_ODBC3,SQL_IS_INTEGER);
ret=SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);//申請數(shù)據(jù)庫連接句柄
ret=SQLConnect(hdbc,(SQLCHAR*)"data_test",SQL_NTS,(SQLCHAR*)"sa",SQL_NTS,(SQLCHAR*)"12345678",SQL_NTS);
/*data_test為配置的ODBC數(shù)據(jù)源名稱,這里根據(jù)自己的配置進行修改*/
if(!(ret==SQL_SUCCESS || ret==SQL_SUCCESS_WITH_INFO))
{
printf("連接數(shù)據(jù)庫失敗!\n");
return -1;
}
ret=SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt);
/*執(zhí)行sql語句*/
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;
}
需要說明的是,在多數(shù)環(huán)境中,代碼會報錯,報錯信息如下:(SQLCHAR*)無法與(SQLWCHAR*)兼容,于是有人可能會想到,直接強轉(zhuǎn)為(SQLWCHAR*),但是依然在SQLConnect函數(shù)處報錯,無法連接上數(shù)據(jù)庫,這時需要修改字符集,配置為多字節(jié)字符集,操作如下:

到此這篇關(guān)于C語言中操作sqlserver數(shù)據(jù)庫案例教程的文章就介紹到這了,更多相關(guān)C語言操作sqlserver內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何在 clion 運行多個 main 函數(shù)(方法詳解)
這篇文章主要介紹了如何在 clion 運行多個 main 函數(shù),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
C語言中pthread_exit和pehread_join的使用
pthread_exit用于強制退出一個線程,pthread_join用于阻塞等待線程退出,獲取線程退出狀態(tài),本文主要介紹了C語言中pthread_exit和pehread_join函數(shù)的使用,具有一定的參考價值,感興趣的可以了解一下2024-02-02
新舊MFC版本實現(xiàn)CEdit透明的2種方法的實例代碼
新舊MFC版本實現(xiàn)CEdit透明的2種方法的實例代碼,需要的朋友可以參考一下2013-03-03
關(guān)于STL中vector容器的一些總結(jié)
vector作為STL提供的標準容器之一,是經(jīng)常要使用的,有很重要的地位,并且使用起來也是灰常方便。vector又被稱為向量,vector可以形象的描述為長度可以動態(tài)改變的數(shù)組,功能和數(shù)組較為相似2013-09-09

