核心流程
- 建立
CDatabase 連接。
- 用
CRecordset 執行查詢。
- 遍歷結果集,逐字段
GetDlgItem(IDC_EDIT)->SetWindowText()。
關鍵代碼
CDatabase db;
db.OpenEx(_T("DSN=MySQLDSN;UID=root;PWD=123456"), CDatabase::noOdbcDialog);
CRecordset rs(&db);
rs.Open(CRecordset::snapshot, _T("SELECT * FROM user WHERE id=1"));
if (!rs.IsEOF()) {
CString str;
rs.GetFieldValue(_T("name"), str);
GetDlgItem(IDC_EDIT_NAME)->SetWindowText(str);
rs.GetFieldValue(_T("age"), str);
GetDlgItem(IDC_EDIT_AGE)->SetWindowText(str);
// ... 其他字段
}
rs.Close();
db.Close();
進階:RFX 字段綁定(自動映射)
class CUserSet : public CRecordset {
public:
CString m_name; int m_age;
CUserSet(CDatabase* pdb) : CRecordset(pdb) {}
virtual void DoFieldExchange(CFieldExchange* pFX) {
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, _T("name"), m_name);
RFX_Int(pFX, _T("age"), m_age);
}
};
// 使用
CUserSet set(&db);
set.Open(CRecordset::snapshot, _T("SELECT name, age FROM user WHERE id=1"));
if (!set.IsEOF()) {
GetDlgItem(IDC_EDIT_NAME)->SetWindowText(set.m_name);
GetDlgItem(IDC_EDIT_AGE)->SetWindowText(std::to_string(set.m_age).c_str());
}
中文亂碼解決
- 連接字符串加
CHARSET=utf8。
- 表/庫字符集
utf8mb4。
- 項目屬性「字符集」設為「使用 Unicode 字符集」。