首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

VS2010 MFC 連接 MySQL:棄用 ODBC/DSN 改用代碼直連方案

     編輯:程式設計綜合問答

傳統 ODBC/DSN 方案痛點

  • 需配置系統/用戶 DSN,部署繁瑣
  • 32/64 位 ODBC 管理器混淆
  • DSN-less 連接字符串調試困難
  • 類向導生成代碼僵化難維護

推薦:MySQL C++ Connector 直連方案

1. 環境準備

  • 下載 MySQL Connector/C++
  • 項目屬性 → VC++ Directories:
    • Include: $(MySQLConnDir)\include
    • Library: $(MySQLConnDir)\lib64\vs14 (對應 VS 版本)
  • 鏈接器 → Input → Additional Dependencies: mysqlcppconn.lib
  • 運行時複製 mysqlcppconn.dll 至 EXE 目錄

2. 封裝類實現

#pragma once
#include 
#include 
#include 
#include 
#include 
#include 

class MySQLDatabase {
    sql::mysql::MySQL_Driver* driver;
    std::unique_ptr conn;
public:
    bool Connect(const CString& host, int port, 
                 const CString& user, const CString& pwd, const CString& db) {
        try {
            driver = sql::mysql::get_mysql_driver_instance();
            std::string url = "tcp://" + CT2A(host) + ":" + std::to_string(port) + "/" + CT2A(db);
            conn.reset(driver->connect(url, CT2A(user), CT2A(pwd)));
            return conn->isValid();
        } catch (sql::SQLException& e) {
            AfxMessageBox(CString(e.what()));
            return false;
        }
    }
    
    std::unique_ptr Query(const CString& sql) {
        std::unique_ptr stmt(conn->createStatement());
        return std::unique_ptr(stmt->executeQuery(CT2A(sql)));
    }
    
    int Execute(const CString& sql) {
        std::unique_ptr stmt(conn->createStatement());
        return stmt->executeUpdate(CT2A(sql));
    }
};

3. 使用示例

MySQLDatabase db;
if (db.Connect(_T("127.0.0.1"), 3306, _T("root"), _T("123456"), _T("testdb"))) {
    auto rs = db.Query(_T("SELECT * FROM users"));
    while (rs->next()) {
        CString name = rs->getString("name").c_str();
        // 處理數據...
    }
}

優勢總結

  • 零配置部署,XCOPY 部署友好
  • 完整 C++11 智能指針資源管理
  • 支持預編譯語句防注入
  • 異常處理機制完善
  • 跨平台一致性 API

參考完整教程:MFC MySQL Connector/C++ 實戰

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved