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

C語言通過 ODBC 連接 Access 數據庫:配置連接字符串與 SQL 操作實戰

     編輯:關於C語言

背景:為什麼選 Access + ODBC?

  • Access (.mdb/.accdb) 隨 Office 普及,無需單獨安裝數據庫服務器。
  • ODBC 為標準 C API,跨數據庫通用,學會 Access 即可遷移到 MySQL/SQL Server/PostgreSQL(只換連接串)。

關鍵修改:連接字符串


// 原 MySQL 連接串
SQLCHAR ConnStrIn[MAXBUFLEN] = 
    "DRIVER={MySQL ODBC 5.1 Driver};SERVER=127.0.0.1;UID=root;PWD=root;DATABASE=test;CharSet=gbk;";

// 改為 Access (`.mdb`) 連接串
SQLCHAR ConnStrIn[MAXBUFLEN] = 
    "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\mydatabase.mdb;Uid=Admin;Pwd=;CharSet=gbk;";
  • Driver:Access 驅動名稱(系統 DSN 或驅動名)。
  • Dbq:數據庫文件絕對路徑(雙反斜杠轉義)。
  • Uid/Pwd:Access 默認 Admin 無密碼。

完整 ODBC 操作流程

  1. 分配環境句柄:SQLAllocHandle(SQL_HANDLE_ENV, ...)
  2. 設置 ODBC 版本:SQLSetEnvAttr(..., SQL_ATTR_ODBC_VERSION, SQL_OV_ODBC3)
  3. 分配連接句柄:SQLAllocHandle(SQL_HANDLE_DBC, ...)
  4. 連接:SQLDriverConnect(..., ConnStrIn, ...)
  5. 分配語句句柄:SQLAllocHandle(SQL_HANDLE_STMT, ...)
  6. 準備/執行 SQL:
    
    // 插入示例
    SQLPrepare(hstmt, (SQLCHAR*)"INSERT INTO T_Person(FAge, FName) VALUES(20, 'kider')", SQL_NTS);
    SQLExecute(hstmt);
    
  7. 提交/回滾:SQLEndTran(SQL_COMMIT)
  8. 釋放句柄:逆序 SQLFreeHandle。

前置準備清單

  1. 建立 C:\mydatabase.mdb (Access 2000/2003 格式兼容性最好)。
  2. 在 Access 中建表 T_Person,字段 FAge (Number), FName (Text)。
  3. 確認系統安裝 Microsoft Access Driver (*.mdb) (Windows 自帶,64位 Office 需 64位驅動,32位程序需 32位驅動)。
  4. 編譯鏈接 odbc32.lib (Windows SDK) 或 -lodbc (Linux unixODBC)。

常見錯誤排查

現象原因解決
SQL_ERROR 連接失敗驅動名錯誤/路徑錯誤/位數不匹配ODBC 數據源管理器測試 DSN;確認程序與驅動同為 32/64 位
表不存在SQL 中表名/字段名拼寫錯誤Access 中打開表核對名稱,注意大小寫
中文亂碼字符集不匹配連接串加 CharSet=gbk 或 utf-8,配合 SQLSetConnectAttr

遷移到其他數據庫只需改連接串


// SQL Server
"Driver={SQL Server};Server=127.0.0.1;Database=test;Uid=sa;Pwd=123;"
// PostgreSQL
"Driver={PostgreSQL Unicode};Server=127.0.0.1;Port=5432;Database=test;Uid=postgres;Pwd=123;"
// SQLite (需 ODBC 驅動)
"Driver={SQLite3 ODBC Driver};Database=C:\\data.db;"

ODBC 統一 API 讓數據庫切換極低成本,適合輕量級桌面應用、嵌入式設備數據存儲。

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