工控编程吧

标题: 上位机MFC如何使用ADO打开与关闭数据库连接 [打印本页]

作者: qq263946146    时间: 2019-8-9 10:13
标题: 上位机MFC如何使用ADO打开与关闭数据库连接
在使用ADO前我们应该初始化COM库
  1. if (!SUCCEEDED(CoInitialize(NULL)))
  2.         {
  3.                 ::AfxMessageBox(_T("Failed to initialize COM!"));
  4.                 return FALSE;
  5.         }
复制代码
然后引入ADO动态库。
  1. #import "c:\program files\common files\system\ado\msado15.dll"\
  2.                 no_namespace\
  3.                 rename("EOF", "adoEOF")
复制代码
然后才是定义智能指针,初始化它,再进行数据库的打开与关闭
  1. _ConnectionPtr m_pConnection;
复制代码

  1. if (!SUCCEEDED(m_pConnection.CreateInstance(__uuidof(Connection))))
  2.         {
  3.                 m_pConnection = NULL;
  4.                 TRACE(_T("Database CreateInstance failed"));
  5.         }
复制代码
调用下面按钮点击函数来打开 与关闭数据库。
  1. void CGkbc8Dlg::OnButton1()
  2. {
  3.         if (m_pConnection->State & adStateOpen)
  4.         {
  5.                 AfxMessageBox(_T("数据库已经打开。"));
  6.                 return;
  7.         }
  8.        
  9.         CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Demo.mdb");
  10.         if (OpenDatabase(strConnect))
  11.         {
  12.                 AfxMessageBox(_T("数据库打开成功。"));
  13.         }
  14.         else
  15.         {
  16.                 AfxMessageBox(_T("数据库打开失败。"));
  17.         }
  18. }
复制代码
  1. BOOL CDemoDlg::CloseDatabase()
  2. {
  3.         ASSERT(m_pConnection != NULL);

  4.         //关闭数据库连接
  5.         try
  6.         {
  7.                 if (m_pConnection->State & adStateOpen)
  8.                 {
  9.                         return SUCCEEDED(m_pConnection->Close());
  10.                 }
  11.                 else
  12.                 {
  13.                         return TRUE;
  14.                 }
  15.         }
  16.         catch (_com_error& e)
  17.         {
  18.                 TRACE(_T("%s\n"), e.ErrorMessage());
  19.                 return FALSE;
  20.         }
  21. }
复制代码
上面两具按钮调用的两个函数为

  1. void CDemoDlg::OnOpen()
  2. {
  3.         if (m_pConnection->State & adStateOpen)
  4.         {
  5.                 AfxMessageBox(_T("数据库已经打开。"));
  6.                 return;
  7.         }
  8.        
  9.         CString strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= Demo.mdb");
  10.         if (OpenDatabase(strConnect))
  11.         {
  12.                 AfxMessageBox(_T("数据库打开成功。"));
  13.         }
  14.         else
  15.         {
  16.                 AfxMessageBox(_T("数据库打开失败。"));
  17.         }
  18. }

  19. void CDemoDlg::OnClose()
  20. {
  21.         if (!(m_pConnection->State & adStateOpen))
  22.         {
  23.                 AfxMessageBox(_T("数据库未打开。"));
  24.                 return;
  25.         }

  26.         if (CloseDatabase())
  27.         {
  28.                 AfxMessageBox(_T("数据库关闭成功。"));
  29.         }
  30.         else
  31.         {
  32.                 AfxMessageBox(_T("数据库关闭失败。"));
  33.         }
  34. }
复制代码
注意,例程打开的是根目录的一个数据库文件:Demo.mdb
(, 下载次数: 3)