| 參數 | 含義 | 範例 |
| Driver | ODBC 驅動名稱(需系統已安裝) | {Microsoft Access Driver (*.mdb)} |
| Dbq | 數據庫文件路徑 | C:\\data\\mydb.mdb 或 //mydatabase.mdb |
| Uid/Pwd | 用戶名/密碼(Access 常為空) | Admin / (空) |
前置準備清單
- 安裝 Office(自帶 Access Driver)或單獨安裝 Microsoft Access Database Engine
- 建立
.mdb 文件(可用 Access 打開建表,或代碼建表)
- 確認驅動名稱:
控制面板 → 管理工具 → ODBC 數據源 → 驅動程式 查看
配套 SQL 操作必須匹配表結構
// 代碼中的 SQL
result = SQLPrepare(hstmt, (SQLCHAR*)"insert into T_Person(FAge,FName) values(20,'kider')", SQL_NTS);
⚠️ 必須預先在 Access 中建立:
- 表名:
T_Person
- 欄位:
FAge (數值)、FName (文本)
否則 SQLExecute 會報錯:Table 'T_Person' not found 或 Field 'FAge' not found。
完整流程最小化範例
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <stdio.h>
#define MAXBUFLEN 1024
int main() {
SQLHENV henv; SQLHDBC hdbc; SQLHSTMT hstmt;
SQLRETURN ret;
SQLCHAR ConnStrIn[MAXBUFLEN] =
"Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\test.mdb;Uid=Admin;Pwd=;";
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
ret = SQLDriverConnect(hdbc, NULL, ConnStrIn, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT);
if(!SQL_SUCCEEDED(ret)) { printf("連接失敗\n"); return 1; }
SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
SQLExecDirect(hstmt, (SQLCHAR*)"CREATE TABLE T_Person (FAge INT, FName TEXT(50))", SQL_NTS);
SQLExecDirect(hstmt, (SQLCHAR*)"INSERT INTO T_Person VALUES (25, 'Alice')", SQL_NTS);
printf("插入成功\n");
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return 0;
}
常見問題排查
| 錯誤 | 原因 | 解決 |
| Driver not found | 未安裝 Access Driver | 安裝 Access Database Engine 2010/2016 |
| Could not find file | Dbq 路徑錯誤 | 用絕對路徑,雙反斜桿或正斜桿 |
| Data type mismatch | 欄位類型不符 | 檢查建表 SQL 與插入值類型 |
| Syntax error in INSERT | 保留字衝突 | 欄位名加方括號 [FAge] |
進階建議
- 使用參數化查詢(
SQLBindParameter)防注入
- 連接池複用
SQLAllocHandle/SQLFreeHandle
- 大數據量考慮遷移 SQLite / SQL Server Express
- 64 位程式需安裝 64 位 Access Engine
- 上一篇文章: C語言字符與字符串本質區別深度解析:單引號vs雙引號
- 下一篇文章: C Primer Plus 筆記:C程序結構、預處理與關鍵字核心概念
Copyright ©
程式碼之家 All Rights Reserved