1. 程式人生 > >C語言操作MYSQL------基於VC6.0 & VS2010

C語言操作MYSQL------基於VC6.0 & VS2010

相信大家在ubuntu下用c操作mysql已經相當的熟悉,對比在windows下其實操作起來也不復雜,這個教程是為了整理在windows下用c操作mysql的過程,平臺基於VC6.0,相信VS2010等一樣可以照此移植。

1、開啟VC6.0,建立Win32的控制檯應用程式,工程名稱為testsql,如下圖:

確定後選擇Hello,world的範例工程。

2、對VC6.0的編譯環境進行配置

首先、告訴編譯器你的mysql的標頭檔案的路徑(我的路徑是:C:\Program Files\MySQL\MySQL Server 5.5\include),選擇VC6.0的選單:工具---->選項---->目錄,到此選擇Include Files,如下圖:

選擇新增標頭檔案的路徑:C:\Program Files\MySQL\MySQL Server 5.5\include

其次、在相同的介面下選擇Library Files,新增mysql的lib庫和dll庫檔案的路徑,我的是(C:\Program Files\MySQL\MySQL Server 5.5\lib),新增完如下圖:

OK,最後、需要注意的是,我們設定完成之後,要在VC6.0的選單:工程---->設定---->連線---->物件/庫模組內新增庫名稱:libmysql.lib,如下圖:

當然如果到此設定之後,你的工程還是會報錯或者執行失敗,可以嘗試把(C:\Program Files\MySQL\MySQL Server 5.5\lib)目錄內libmysql.dll和libmysql.lib檔案拷貝到你的工程目錄內(根目錄),再次執行看看。

3、測試,連線資料庫,查詢資料庫內的指定表資料(我已經在MYSQL SEVER內建了一個watersensors的資料庫,其中建立了一個名為sensors的表),程式碼如下:

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
// 需要新增MYSQL庫要用到
#include <winsock2.h>
#include "mysql.h" 

#pragma comment(lib, "ws2_32")
// 可以根據實際情況下面的預編譯可以不需要
#pragma comment(lib, "libmysql")


int main(int argc, char* argv[])
{
	MYSQL mysql;
    MYSQL_RES *result;
    MYSQL_ROW row;  
	// 初始化mysql結構 
    mysql_init(&mysql);
	if(mysql_real_connect(&mysql,"127.0.0.1","root","WYS1234","watersensors",3306,NULL,0) == NULL)
	{
		printf("連線失敗,錯誤報告是: %s\n",mysql_error(&mysql)); 
	}
	else
	{
		printf("資料庫連線成功……\n");
	}
	// 如果連線成功,則開始查詢 
	if(mysql_query(&mysql, "select * from sensors") != 0)           
	{ 
		printf("查詢失敗,錯誤報告是: %s\n",mysql_error(&mysql)); 
    } 
    else 
    { 
		printf("資料庫查詢成功……\n");
		// 儲存查詢的結果 
        if((result = mysql_store_result(&mysql)) == NULL) 
        { 
			printf("儲存結果集失敗,錯誤報告是: %s\n",mysql_error(&mysql)); 
        } 
        else 
        { 
			// 讀取結果集中的資料,返回的是下一行。因為儲存結果集時,當前的遊標在第一行【之前】 
            while((row = mysql_fetch_row(result)) != NULL) 
            { 
				// 列印當前行的第一列的資料 
                printf("deviceid is %s\n", row[0]);              
            } 
        } 
 
    } 

	// 釋放查詢結果
	mysql_free_result(result);
	// 關閉資料庫連線
	mysql_close(&mysql);
	// 退出mysql
	mysql_library_end();
	
	printf("Hello World!\n");
	return 0;
}

4、編譯執行結果如下:

<完>

<補>

對於VS2010的控制檯應用程式來說,需要如下步驟:

1、選單---->專案---->專案屬性---->配置屬性---->VC++目錄,將【包含目錄】程式設計新增MYSQL的標頭檔案目錄,

將【庫目錄】編輯新增MYSQL的庫目錄,如下圖:


2、新增庫,同1中的相同介面下選擇【聯結器】,在【附加依賴項】內新增libmysql.lib,如下圖:


3、必須將MYDQL庫目錄下的libmysql.lib和libmysql.cll檔案複製到工程的根目錄下,如工程目錄在D:\TestSQL,

則複製到TestSQL\TestSQL目錄下。

4、編譯執行,檢視結果如下:


5、結束

【附上從連線到建立到建表到插入資料的c程式碼全過程】

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
// 需要新增MYSQL庫要用到
#include <winsock2.h>
#include "mysql.h" 

#pragma comment(lib, "ws2_32")
// 可以根據實際情況下面的預編譯可以不需要
#pragma comment(lib, "libmysql")


int main(int argc, char* argv[])
{
	char ch;
	MYSQL mysql;
    MYSQL_RES *result;
    MYSQL_ROW row;
	long systim1,systim2;
	// 記錄開始時間
	systim1 = GetTickCount();
	// 初始化mysql結構 
    mysql_init(&mysql);
	
	if(mysql_real_connect(&mysql,"127.0.0.1","root","WYS1234",NULL,3306,NULL,0) == NULL)
	{
		printf("連線失敗,錯誤報告是: %s\n", mysql_error(&mysql)); 
	}
	else
	{
		printf("資料庫伺服器連線成功……\n");
	}
	// 建立一個數據庫
	if(mysql_query(&mysql,"create database if not exists helloworld") != 0)
	{
		printf("資料庫建立失敗,錯誤報告是: %s\n", mysql_error(&mysql)); 
	}
	else
	{
		printf("資料庫helloworld建立成功……\n");
	}
	// 選擇資料庫
	if(mysql_query(&mysql,"use helloworld") != 0)
	{
		printf("資料庫選擇失敗,錯誤報告是: %s\n", mysql_error(&mysql)); 
	}
	else
	{
		printf("資料庫選擇成功……\n");
	}
	// 建立一張表
	if(mysql_query(&mysql,"create table sensors(deviceid varchar(20))") != 0)
	{
		printf("資料庫建表失敗,錯誤報告是: %s\n", mysql_error(&mysql)); 
	}
	else
	{
		printf("資料庫建表成功……\n");
	}
	// 插入一條資料
	if(mysql_query(&mysql,"insert into sensors(deviceid) value('5566998877445566')") != 0)
	{
		printf("插入資料失敗,錯誤報告是: %s\n",mysql_error(&mysql));
	}
	else
	{
		printf("資料庫插入成功……\n");
	}
	
	// 如果連線成功,則開始查詢 
	if(mysql_query(&mysql, "select * from sensors") != 0)           
	{ 
		printf("查詢失敗,錯誤報告是: %s\n",mysql_error(&mysql));
    } 
    else 
    { 
		printf("資料庫查詢成功……\n");
		// 儲存查詢的結果 
        if((result = mysql_store_result(&mysql)) == NULL) 
        { 
			printf("儲存結果集失敗,錯誤報告是: %s\n",mysql_error(&mysql));
        } 
        else 
        { 
			// 讀取結果集中的資料,返回的是下一行。因為儲存結果集時,當前的遊標在第一行【之前】 
            while((row = mysql_fetch_row(result)) != NULL) 
            { 
				// 列印當前行的第一列的資料 
                printf("deviceid is %s\n", row[0]);              
            } 
        } 
 
    } 
	// 釋放查詢結果
	mysql_free_result(result);
	// 關閉資料庫連線
	mysql_close(&mysql);
	// 退出mysql
	mysql_library_end();
	
	// 記錄結束時間
	systim2 = GetTickCount();
	printf("used times is %dms\n",systim2 - systim1);

	printf("Hello World!\n");
	printf("press enter to exit!\n");

	scanf("%c",&ch);
	
	return 0;
}