溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言中操作sqlserver數(shù)據(jù)庫的方法

發(fā)布時間:2022-04-01 17:13:53 來源:億速云 閱讀:324 作者:iii 欄目:編程語言

這篇文章主要講解了“C語言中操作sqlserver數(shù)據(jù)庫的方法”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C語言中操作sqlserver數(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ù)庫引擎是無關的,為應用程序的跨平臺和可移植奠定了基礎。

創(chuàng)建ODBC數(shù)據(jù)源:控制面板――管理工具――ODBC數(shù)據(jù)源(32位)

C語言中操作sqlserver數(shù)據(jù)庫的方法

可以看到,這里存在三種類型的DSN(數(shù)據(jù)源名),其中:

用戶DSN:只允創(chuàng)建該DSN的用戶使用該數(shù)據(jù)源;

系統(tǒng)DSN:所有登陸該服務器的用戶都能使用該數(shù)據(jù)源;

文件DSN:配置信息保存在文件中,所有登陸的用戶均可使用;

在本實驗中,采用系統(tǒng)DSN:

點擊添加,然后選擇SQL Server

C語言中操作sqlserver數(shù)據(jù)庫的方法

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

C語言中操作sqlserver數(shù)據(jù)庫的方法

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

C語言中操作sqlserver數(shù)據(jù)庫的方法

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

C語言中操作sqlserver數(shù)據(jù)庫的方法

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

C語言中操作sqlserver數(shù)據(jù)庫的方法

這就完成了ODBC數(shù)據(jù)源的創(chuàng)建。

程序測試,數(shù)據(jù)庫中已包含一個叫做stu_info的數(shù)據(jù)庫,且其中有一張student的學生信息表,其包含的字段信息如下:

C語言中操作sqlserver數(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);//申請環(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ù)庫失敗!
");
		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	%s	%s	%s	%s	%s
",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é)字符集,操作如下:

C語言中操作sqlserver數(shù)據(jù)庫的方法

感謝各位的閱讀,以上就是“C語言中操作sqlserver數(shù)據(jù)庫的方法”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C語言中操作sqlserver數(shù)據(jù)庫的方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI