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

C 語言 ODBC 數據庫操作實戰:VC6 + Windows 環境配置與 CRUD

     編輯:關於C語言

C 語言 ODBC 數據庫操作實戰

環境準備

  • OS:Windows 7 (64 位)
  • IDE:Visual C++ 6.0
  • 數據庫:任意支持 ODBC 的數據庫(SQL Server, Access, MySQL 等)
  • 關鍵步驟:運行 C:\Windows\SysWOW64\odbcad32.exe(32 位 ODBC 管理器)配置**系統 DSN**,而非控制面板中的 64 位版本。

MFC 單文檔視圖項目向導配置

  1. 新建 MFC AppWizard (exe) → Single Document。
  2. Step 2 勾選「Database support」→ 「Header files only」或「Header files with database support」。
  3. Step 3 選擇數據源(已配置的 DSN)、表名。
  4. 生成的類:CRecordset 派生類(如 CUserSet),包含字段成員變量。

界面綁定

  • 對話框編輯器放置編輯框(IDC_USER, IDC_PASSWORD 等)。
  • ClassWizard (Ctrl+W) → Member Variables 綁定 CRecordset 字段到控件。

核心 CRUD 代碼片段

刪除當前記錄

// 刪除
m_pSet->Delete();
if (!m_pSet->IsEOF())
    m_pSet->MoveNext();  // 刪除後游標指向下一條
else
    m_pSet->MoveLast();  // 若刪最後一條,移到新末尾
m_pSet->Requery();       // 刷新記錄集

添加新記錄

// 添加
m_pSet->AddNew();
m_pSet->SetFieldNull(&m_pSet->m_ID, FALSE); // 若 ID 非自增需手動賦值
GetDlgItemText(IDC_USER, m_pSet->m_username);
GetDlgItemText(IDC_PASSWORD, m_pSet->m_password);
m_pSet->Update();      // 寫入數據庫
m_pSet->MoveLast();    // 移到新記錄
m_pSet->Requery();

修改當前記錄

// 修改
m_pSet->Edit();
GetDlgItemText(IDC_USER, m_pSet->m_username);
GetDlgItemText(IDC_PASSWORD, m_pSet->m_password);
m_pSet->Update();
m_pSet->Requery();

關鍵類與函數說明

函數作用
AddNew()準備新增記錄,字段置為 NULL/默認值
Edit()將當前記錄置於編輯模式
Update()提交 AddNew/Edit 的修改到數據庫
Delete()刪除當前記錄
MoveNext/Prev/First/Last()游標導航
Requery()重新執行查詢刷新記錄集
SetFieldNull()顯式設置字段為 NULL/非 NULL

常見問題與避坑

  • DSN 架構不匹配:64 位系統必須用 odbcad32.exe (SysWOW64) 配置 32 位 DSN,供 VC6 (32 位) 使用。
  • 字段類型不匹配:數據庫字段類型與 CRecordset 成員類型必須對應(如 CString 對應 varchar/text,long 對應 int)。
  • 事務處理:MFC ODBC 默認自動提交。需手動事務請用 CDatabase::BeginTrans/CommitTrans/Rollback。
  • 記錄集類型:CRecordset::snapshot (默認, 唯讀/快照)、dynaset (可更新, 鍵集游標)、dynamic (全動態, 性能較差)。選擇 dynaset 支持增刪改。

總結

VC6 + MFC + ODBC 是經典 Windows 桌面數據庫開發棧。核心流程:配置 32 位系統 DSN → 向導生成 CRecordset 派生類 → 界面綁定字段 → 調用 AddNew/Edit/Delete/Update 實現 CRUD → Requery 刷新。掌握游標移動邏輯(刪除後 MoveNext/MoveLast)是避免「刪除後界面不更新」關鍵。

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