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

MFC + ADO 存取 Oracle 12c:登入後在個人中心顯示用戶資料的實作策略

     編輯:程式設計疑難解答

MFC 對話框登入/註冊後,需在主視窗的「個人中心」頁面顯示當前用戶帳號與註冊資料,且不再要求輸入密碼。核心在於 全域/應用程式層級保存用戶身分。

資料流向

  1. 使用者在登入對話框輸入帳密 → 驗證通過。
  2. 將用戶 ID (或完整用戶物件) 存入 CWinApp 派生類 (theApp) 的成員變數,或全域結構體。
  3. 主視窗建立「個人中心」子視窗/對話框時,從 theApp 取得用戶 ID。
  4. 子視窗 OnInitDialog 中執行 ADO 查詢:SELECT * FROM users WHERE user_id = ?。
  5. 將查詢結果綁定到編輯框/靜態文字控制項顯示。

關鍵程式碼片段

// MyApp.h
class CMyApp : public CWinApp {
public:
    CString m_strCurrentUserID; // 登入成功後賦值
    // ... 其他用戶資料快取 ...
};

// LoginDlg.cpp - 登入成功後
CMyApp* pApp = (CMyApp*)AfxGetApp();
pApp->m_strCurrentUserID = strUserID; // 保存 ID

// PersonalCenterDlg.cpp - OnInitDialog
CMyApp* pApp = (CMyApp*)AfxGetApp();
CString sql;
sql.Format(_T("SELECT username, email, phone FROM users WHERE user_id = '%s'"), pApp->m_strCurrentUserID);
_RecordsetPtr rs = pApp->m_pConnection->Execute(_bstr_t(sql), NULL, adCmdText);
if (!rs->adoEOF) {
    SetDlgItemText(IDC_EDIT_USERNAME, (LPCTSTR)(_bstr_t)rs->GetCollect("username"));
    SetDlgItemText(IDC_EDIT_EMAIL, (LPCTSTR)(_bstr_t)rs->GetCollect("email"));
    SetDlgItemText(IDC_EDIT_PHONE, (LPCTSTR)(_bstr_t)rs->GetCollect("phone"));
}
rs->Close();

安全與擴充建議

  • 密碼不可明文儲存,資料庫僅存雜湊 (bcrypt/Argon2)。
  • 敏感資料 (身分證、銀行卡) 若非必要勿在前端完整顯示,採用遮罩 (如 `***1234`)。
  • 若需跨程序/重啟保持登入,可將 Token 寫入登錄表或加密設定檔,啟動時自動驗證。
  • 考慮引入輕量 ORM (如 OTL, SQLite ORM) 簡化 ADO 樣板碼。

掌握「集中保存身分、按需查詢顯示」模式,MFC 資料庫應用即能輕鬆實現個人化頁面。

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