// DialogDsn.cpp : 实现文件 // #include "stdafx.h" #include "FirstStep.h" #include "DialogDsn.h" #include "afxdialogex.h" // CDialogDsn 对话框 IMPLEMENT_DYNAMIC(CDialogDsn, CDialogEx) CDialogDsn::CDialogDsn(CWnd* pParent /*=NULL*/) : CDialogEx(CDialogDsn::IDD, pParent) { m_UserPwd = _T(""); m_UserName = _T(""); m_DsnName = _T(""); } CDialogDsn::~CDialogDsn() { } /***************************************************************** **【函数名称】 __getRegInfo **【函数功能】 获取注册表中数据源信息 **【参数】 **【返回值】 ****************************************************************/ bool CDialogDsn::__getRegInfo() { CRegKey key; // 打开键值失败 if(key.Open(HKEY_CURRENT_USER, "Software\\FirstStep\\Database", KEY_READ) != ERROR_SUCCESS) { key.Create(HKEY_CURRENT_USER, "Software\\FirstStep\\Database"); } else { // DSN名称 ULONG nSize = MAX_PATH; CHAR szTmp[MAX_PATH] = { 0 }; key.QueryStringValue("DSN", szTmp, &nSize); m_DsnName = szTmp; // 用户名 nSize = MAX_PATH; memset(szTmp, 0, MAX_PATH); key.QueryStringValue("USER", szTmp, &nSize); m_UserName = szTmp; // 口令 nSize = MAX_PATH; memset(szTmp, 0, MAX_PATH); key.QueryStringValue("PASS", szTmp, &nSize); m_UserPwd = szTmp; } key.Close(); return true; } /***************************************************************** **【函数名称】 __setRegInfo **【函数功能】 设置注册表中数据源信息 **【参数】 **【返回值】 ****************************************************************/ bool CDialogDsn::__setRegInfo() { // 保存配置信息到注册表 CRegKey key; key.Open(HKEY_CURRENT_USER, "Software\\FirstStep\\Database", KEY_WRITE); key.SetStringValue("DSN", m_DsnName); key.SetStringValue("USER", m_UserName); key.SetStringValue("PASS", m_UserPwd); key.Close(); return true; } void CDialogDsn::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_EDT_DB_PWD, m_UserPwd); DDX_Text(pDX, IDC_EDT_DB_USER, m_UserName); DDX_Text(pDX, IDC_EDT_DSN, m_DsnName); } BEGIN_MESSAGE_MAP(CDialogDsn, CDialogEx) ON_BN_CLICKED(IDOK, &CDialogDsn::OnBnClickedOk) ON_BN_CLICKED(IDCANCEL, &CDialogDsn::OnBnClickedCancel) ON_BN_CLICKED(IDC_BTN_DSN_TEST, &CDialogDsn::OnBnClickedBtnDsnTest) END_MESSAGE_MAP() // CDialogDsn 消息处理程序 void CDialogDsn::OnBnClickedOk() { UpdateData(TRUE); // 生成连接字符串 CString ConStr;; ConStr.Format(_T("DSN=%s; UID=%s; PWD=%s"), m_DsnName, m_UserName, m_UserPwd); CHAR szErrInfo[OTL_MAX_BUFF_SIZE] = { 0 }; if(!IOtlConnection::getInstance()->ConnectTest(ConStr, szErrInfo)) { CString strInfo = _T("数据库连接失败:\r\n"); strInfo += szErrInfo; MessageBox(strInfo, "数据源配置", MB_ICONWARNING | MB_OK); return; } else { __setRegInfo(); // 保存配置到注册表 IOtlConnection::getInstance()->Disconnect(); IOtlConnection::getInstance()->Connect(); CDialogEx::OnOK(); }// end if } void CDialogDsn::OnBnClickedCancel() { CDialogEx::OnCancel(); } void CDialogDsn::OnBnClickedBtnDsnTest() { UpdateData(TRUE); // 生成连接字符串 CString ConStr;; ConStr.Format(_T("DSN=%s; UID=%s; PWD=%s"), m_DsnName, m_UserName, m_UserPwd); CHAR szErrInfo[OTL_MAX_BUFF_SIZE] = { 0 }; if(!IOtlConnection::getInstance()->ConnectTest(ConStr, szErrInfo)) { CString strInfo = _T("数据库连接失败:\r\n"); strInfo += szErrInfo; MessageBox(strInfo, "数据源配置", MB_ICONWARNING | MB_OK); } else { CString strInfo = _T("数据库连接成功!"); MessageBox(strInfo, "数据源配置", MB_ICONINFORMATION | MB_OK); }// end if } INT_PTR CDialogDsn::DoModal() { __getRegInfo(); return CDialogEx::DoModal(); } BOOL CDialogDsn::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE)) return TRUE; return CDialogEx::PreTranslateMessage(pMsg); }