1、添加附加包含目錄
在VS2012中,“項目”——“屬性”——“配置屬性”——“C/C++”——“正常”——“附加包含目錄”,将mysql server\include的絕對路徑添加進去,例如:C:\Program Files\MySQL\MySQL Server 5.6\include。
也可以将include檔案整個拷貝到工程目錄下,然後在VS2012目錄裡面設定相對路徑,例如:$(ProjectDir)\include
如果将include檔案整個拷貝到工程目錄下,但不設定附加包含目錄,則在使用mysql.h這些頭檔案的時候采用以下這種方式添加頭檔案:
#include "include\mysql.h"
2、添加dll和lib檔案及附加依賴項
第一步,将MySQL Server 5.6/lib下的libmysql.dll和libmysql.lib複制到我們工程項目檔案下。
第二步,為工程添加附加依賴項wsock32.lib和libmysql.lib,一種方式是工程--屬性--連結器--輸入--附加依賴項,另一種是在程式開頭用#pragma comment(lib,"xxx.lib")
3、添加頭檔案
//mysql所需的頭檔案和庫檔案
#include <winsock.h> //注意這兩個頭檔案的次序不能放錯
#include "mysql.h"
//包含附加依賴項,也可以在工程--屬性裡面設定
#pragma comment(lib,"libmysql.lib")
3、連接配接資料庫
//以下變量在頭檔案中定義
MYSQL m_sqlConnect; //資料源指針
//連接配接資料庫函數
bool CPosSystemDlg::ConnectMySQL(void)
{
mysql_init(&m_sqlConnect);
//主機IP、使用者、密碼、資料庫、端口、套接字、用戶端辨別、無
if(!mysql_real_connect(&m_sqlConnect,"0.0.0.0","username","password","sql",3306,NULL,0))
{
AfxMessageBox(_T("連接配接資料庫失敗"));
CString error(mysql_error(&m_sqlConnect));
MessageBox(error);
return false;
}
else
{
AfxMessageBox(_T("連接配接資料庫成功"));
return true;
}
}
//釋放資源函數
void CPosSystemDlg::FreeConnect(void)
{
//釋放資源
mysql_free_result(m_sqlRes);
mysql_close(&m_sqlConnect);
}
對于32位隻要按照以上代碼連接配接即可。
但是由于系統是32位或者64位的不同,編譯時會引起如下錯誤:
無法解析的外部符号 [email protected]、_mysql_query......
對于64位,有兩種方法解決上述錯誤:
(1)由于VS建立的項目預設為WIN32 項目,需将平台改為64。設定如下:
第一步,“項目”——“屬性”——“配置屬性”——“配置管理器”——“活動解決方案平台”,下拉選建立,出現一個新的對号框,在鍵入選擇新平台中選擇X64,如下圖所示:

第二步,不是将C:\ProgramFiles\MySQL\MySQL Server 5.7\lib(安裝MySql下的lib檔案夾)中的libmysql.dll拷到項目下的Debug檔案夾中,而是拷到項目下x64\Debug中(或者C:\Windows\System32中),完畢。
(2)要包含32位的lib檔案和dll檔案。
32/64位MySql(lib、dll)資源: http://download.csdn.net/detail/u010439291/8453041
第一步,首先下載下傳32位的lib檔案和dll檔案。
第二步,需要将32位的lib檔案拷到C:\Program Files\MySQL\MySQL Server 5.7\lib(安裝Mysql下的lib檔案夾),拷貝之前需要将原來的libmysql.lib更名。也可以不改變原來的lib檔案名稱,而将32位的libmysql.lib 改為libmysql32.lib 同時在:
項目—>屬性—>連接配接器—>輸入—>附加依賴項:添加libmysql32.lib(名稱和之前保持一緻)。編譯通過之後,運作還要将32位的libmysql.dll放在工程目錄Debug檔案夾中或者System32下。
4、增删查改操作
//以下變量在頭檔案中定義
MYSQL_RES *m_sqlRes; //這個結構代表傳回行的一個查詢結果集
MYSQL_ROW row; //讀到的資料儲存在這個數組裡,通過row[0]按列讀取
//查詢資料
bool CPosSystemDlg::SelectData(char sqlstr[])
{
mysql_query(&m_sqlConnect, "set names gbk"); //設定編碼格式,防止中文亂碼
//傳回0 查詢成功,傳回1查詢失敗
if(mysql_query(&m_sqlConnect,sqlstr)) //執行sql語句
{
CString error(mysql_error(&m_sqlConnect));
MessageBox(error);
return false;
}
else
{
AfxMessageBox(_T("查詢成功"));
//擷取結果集
if (!(m_sqlRes=mysql_store_result(&m_sqlConnect))) //獲得sql語句結束後傳回的結果集
{
CString error(mysql_error(&m_sqlConnect));
MessageBox(error);
return false;
}
else
{
// 将結果逐行讀出直到讀完
row = mysql_fetch_row(m_sqlRes);//得到第一條結果
while (row!=NULL)
{
CString str=CString(row[0]);
MessageBox(str);
row = mysql_fetch_row(m_sqlRes);//取下一條結果
}
}
}
}
增删改三項功能直接通過mysql_query(&m_sqlConnect,sqlstr)語句執行sql語句就OK了。
附MySQL的API接口:
mysql_affected_rows() 傳回被最新的UPDATE, DELETE或INSERT查詢影響的行數。
mysql_close() 關閉一個伺服器連接配接。
mysql_connect() 連接配接一個MySQL伺服器。該函數不推薦;使用mysql_real_connect()代替。
mysql_change_user() 改變在一個打開的連接配接上的使用者和資料庫。
mysql_create_db() 建立一個資料庫。該函數不推薦;而使用SQL指令CREATE DATABASE。
mysql_data_seek() 在一個查詢結果集合中搜尋一任意行。
mysql_debug() 用給定字元串做一個DBUG_PUSH。
mysql_drop_db() 抛棄一個資料庫。該函數不推薦;而使用SQL指令DROP DATABASE。
mysql_dump_debug_info() 讓伺服器将調試資訊寫入日志檔案。
mysql_eof() 确定是否已經讀到一個結果集合的最後一行。這功能被反對; mysql_errno()或mysql_error()可以相反被使用。
mysql_errno() 傳回最近被調用的MySQL函數的出錯編号。
mysql_error() 傳回最近被調用的MySQL函數的出錯消息。
mysql_escape_string() 用在SQL語句中的字元串的轉義特殊字元。
mysql_fetch_field() 傳回下一個表字段的類型。
mysql_fetch_field_direct () 傳回一個表字段的類型,給出一個字段編号。
mysql_fetch_fields() 傳回一個所有字段結構的數組。
mysql_fetch_lengths() 傳回目前行中所有列的長度。
mysql_fetch_row() 從結果集合中取得下一行。
mysql_field_seek() 把列光标放在一個指定的列上。
mysql_field_count() 傳回最近查詢的結果列的數量。
mysql_field_tell() 傳回用于最後一個mysql_fetch_field()的字段光标的位置。
mysql_free_result() 釋放一個結果集合使用的記憶體。
mysql_get_client_info() 傳回客戶版本資訊。
mysql_get_host_info() 傳回一個描述連接配接的字元串。
mysql_get_proto_info() 傳回連接配接使用的協定版本。
mysql_get_server_info() 傳回伺服器版本号。
mysql_info() 傳回關于最近執行得查詢的資訊。
mysql_init() 獲得或初始化一個MYSQL結構。
mysql_insert_id() 傳回有前一個查詢為一個AUTO_INCREMENT列生成的ID。
mysql_kill() 殺死一個給定的線程。
mysql_list_dbs() 傳回比對一個簡單的正規表達式的資料庫名。
mysql_list_fields() 傳回比對一個簡單的正規表達式的列名。
mysql_list_processes() 傳回目前伺服器線程的一張表。
mysql_list_tables() 傳回比對一個簡單的正規表達式的表名。
mysql_num_fields() 傳回一個結果集合重的列的數量。
mysql_num_rows() 傳回一個結果集合中的行的數量。
mysql_options() 設定對mysql_connect()的連接配接選項。
mysql_ping() 檢查對伺服器的連接配接是否正在工作,必要時重新連接配接。
mysql_query() 執行指定為一個空結尾的字元串的SQL查詢。
mysql_real_connect() 連接配接一個MySQL伺服器。
mysql_real_query() 執行指定為帶計數的字元串的SQL查詢。
mysql_reload() 告訴伺服器重裝授權表。
mysql_row_seek() 搜尋在結果集合中的行,使用從mysql_row_tell()傳回的值。
mysql_row_tell() 傳回行光标位置。
mysql_select_db() 連接配接一個資料庫。
mysql_shutdown() 關掉資料庫伺服器。
mysql_stat() 傳回作為字元串的伺服器狀态。
mysql_store_result() 檢索一個完整的結果集合給客戶。
mysql_thread_id() 傳回目前線程的ID。
mysql_use_result() 初始化一個一行一行地結果集合的檢索。
通過本文的介紹,希望你對C++連接配接mysql資料庫的兩種方法有所了解