C++ MFC 連線資料庫(附原始碼)
阿新 • • 發佈:2018-12-11
連線資料庫幾種方式:
- SQL SERVER
- ODBC
- OLE DB
- MYSQL
一、MySQL
這裡介紹如何連線MySQL資料庫,使用的是MySQLworkbench6.3版本,其他版本也可以,安裝過程百度
1、表定義
開發平臺
這裡使用的是vs2008版本,建議2010版本,用visualC++也可以,根據情況匯入。
介面:
程式碼
自定義了一個CDatabase類,實現資料庫操作的封裝。
mysql.h等資料庫檔案見原始碼。
#include "StdAfx.h" #include "MFCDlg.h" #include <cstring> #include <string> #include "CDatabase.h" // 建構函式初始化MYSQL物件 CDatabase::CDatabase() { mysql_init(&mysql); } // 解構函式 CDatabase::~CDatabase() { Close(); mysql_library_end(); } // 關閉資料庫連線 void CDatabase::Close() { if(query) mysql_free_result(query); mysql_close(&mysql); } // 開啟資料庫 bool CDatabase::Open(char* host, char* user, char* pass, char* db) { CString error; if(!mysql_real_connect(&mysql, host, user, pass, db, 3306, NULL, 0)) { error = mysql_error(&mysql); AfxMessageBox(error); //printf("執行查詢操作失敗。錯誤原因: %s\n", mysql_error(&mysql)); return false; } return true; } //選擇記錄 bool CDatabase::Execute(char* sql) { if(mysql_real_query(&mysql, sql, strlen(sql))) return false; query = mysql_use_result(&mysql); return true; } //設定編碼 void CDatabase::SetCode() { //mysql_set_character_set(&mysql, "utf8"); AfxMessageBox("成功"); } //獲取欄位個數 int CDatabase::GetFieldNum() { if (query) return mysql_num_fields(query); return 0; } //獲取記錄行 MYSQL_ROW CDatabase::GetRecord() { if (query) { row = mysql_fetch_row(query); return row; } return NULL; } // 獲取記錄集 void CDatabase::GetRecords() { query = mysql_use_result(&mysql); } // 獲取記錄集欄位值的長度 unsigned long * CDatabase::GetRecordFieldLength() { if (query) return mysql_fetch_lengths(query); return NULL; } // 顯示查詢結果集 bool CDatabase::ShowRecords(char* sql) { // 執行查詢操作 if (!Execute(sql)) return FALSE; unsigned int nFields = GetFieldNum(); CEdit* pWnd = (CEdit*)AfxGetApp()->m_pMainWnd->GetDlgItem(IDC_EDIT1); while ((row = GetRecord())) { unsigned long *lengths; lengths = GetRecordFieldLength(); for(UINT i = 0; i < nFields; i++) { //printf("[%.*s] ", (int) lengths[i], row[i] ? row[i] : "NULL"); char *s = new char[200]; sprintf(s,"%.*s ", (int) lengths[i], row[i] ? row[i] : "NULL"); //CMFCDlg myDialog = new CMFCDlg(); //((CEdit*)myDialog.GetDlgItem(IDC_EDIT1))->SetWindowText(_T("xxxx")); //myDialog->SetWindowText("123") int nLength=pWnd->SendMessage(WM_GETTEXTLENGTH); pWnd->SetSel(nLength, nLength); pWnd->ReplaceSel(s); /*m.setedit(s);*/ } //printf("\n"); } //printf("--------------------------------------------------\n"); return TRUE; }