首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 6.0 使用 ODBC 連接 MySQL 數據庫完整實戰教程

     編輯:關於VC++

項目效果概覽

實現基於對話框的 MFC 應用,包含數據列表顯示、添加、修改、刪除四大核心數據庫操作功能。
程序運行效果圖

環境準備

  • 操作系統:Windows XP
  • MySQL 版本:4.0.23
  • 開發工具:Visual C++ 6.0

一、安裝 MySQL ODBC 驅動

  1. 從 MySQL 官網 下載 mysql-connector-odbc-3.51 Windows 版(ZIP 或 Setup.exe)。
  2. 解壓並運行 setup.exe,按提示完成傻瓜式安裝。

二、配置 ODBC 數據源(DSN)

兩種方式:手工配置(安全、永久)與代碼動態創建(部署便捷)。

方法 1:手工配置(控制面板)

  1. 打開「控制面板」→「管理工具」→「數據源 (ODBC)」。
  2. 切換到「系統 DSN」頁籤,點擊「添加」。
    ODBC 數據源管理器
  3. 選擇 "MySQL ODBC 3.51 Driver",點擊「完成」。
    選擇驅動
  4. 填寫連接參數:
    MySQL ODBC 配置
    • Data Source Name (DSN):如 odbctest(建議純英文)
    • Server:localhost 或遠程 IP
    • User:如 root
    • Password:對應密碼(可留空)
    • Database:下拉選擇目標庫(如 odbc)
  5. 點擊「Test」驗證,顯示 "Successful" 即配置成功。

方法 2:代碼動態創建 DSN

使用 SQLConfigDataSource API,程序運行時自動註冊:

SQLConfigDataSource(
    NULL,
    ODBC_ADD_DSN,
    "MySQL ODBC 3.51 Driver",
    "DSN=odbctest;UID=root;PWD=;SERVER=localhost;DATABASE=odbc;"
);

參數說明:ODBC_ADD_DSN 表示新增;驅動名稱需與驅動管理器中顯示的一致;連接字符串用分號分隔。

三、編寫 MFC 數據庫應用程序

1. 創建基於對話框的工程

  • File → New → Projects → MFC AppWizard (exe)
  • 專案名:ODBCTest,選擇「基於對話框」,Finish。

2. 引入必要頭文件

編輯 stdafx.h:

#include <odbcinst.h>
#include <afxdb.h> // MFC 數據庫類

3. 設計主對話框界面

  • 資源視圖雙擊 IDD_ODBCTEST_DIALOG
  • 放置:List Control(View 設為 Report)、四個按鈕(添加/修改/刪除/退出)
    對話框設計
  • List Control 屬性:Styles → View = Report
    List Control 屬性

4. 準備測試數據(使用 phpMyAdmin 等工具)

在 MySQL 中創建庫 odbc、表 list:

CREATE TABLE list (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(40) NOT NULL,
    age TINYINT NOT NULL
);

插入幾條測試數據。
表結構 測試數據

5. 封裝數據查詢刷新方法 GetRecord()

在 CODBCTestDlg 類中添加成員函數:

void CODBCTestDlg::GetRecord() {
    m_list.DeleteAllItems(); // 清空列表
    CDatabase db;
    // 連接字符串格式:ODBC;DSN=xxx;UID=xxx;PWD=xxx
    if (!db.OpenEx(_T("ODBC;DSN=odbctest;UID=root;PWD="), CDatabase::noOdbcDialog)) {
        AfxMessageBox(_T("數據庫連接失敗"));
        return;
    }
    CRecordset rs(&db);
    rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM list ORDER BY id ASC"));
    int nRow = 0;
    while (!rs.IsEOF()) {
        CString varID, varName, varAge;
        rs.GetFieldValue(_T("id"), varID);
        rs.GetFieldValue(_T("name"), varName);
        rs.GetFieldValue(_T("age"), varAge);
        m_list.InsertItem(nRow, varID);
        m_list.SetItemText(nRow, 1, varName);
        m_list.SetItemText(nRow, 2, varAge);
        rs.MoveNext();
        nRow++;
    }
    rs.Close();
    db.Close();
    // 自適應列寬(需自行實現或使用現成類)
    // m_list.AdjustColumnWidth();
}

在 OnInitDialog 中調用 GetRecord() 初始化顯示;添加/修改/刪除操作後同樣調用刷新。

6. 執行 SQL 更新操作(直接執行 SQL 字符串)

// 修改記錄示例
CString sql;
sql.Format(_T("UPDATE list SET name='%s', age=%d WHERE id=%d"), strName, nAge, nID);
db.ExecuteSQL(sql); // 需先 db.OpenEx
GetRecord(); // 刷新列表

同理實現插入(INSERT INTO)與刪除(DELETE FROM)。

核心類說明

  • CDatabase:管理數據庫連接,OpenEx 建立連接,ExecuteSQL 執行非查詢 SQL。
  • CRecordset:封裝結果集,Open 執行查詢,GetFieldValue 取字段值,MoveNext 移動游標。

常見問題提示

  • 確保項目設置 → Link → Object/library modules 包含 odbc32.lib(VC6 默認已含)。
  • Debug/Release 版本混用會導致斷言失敗,統一使用同一版本。
  • MySQL 4.x/5.x 驅動參數可能不同,請參考驅動文檔調整連接字符串。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved