ADO连接数据库

1. 引入ADO数据库文件msado15.dll,在stdafx.h文件中添加如下代码

1 #import "C:\Program Files\Common Files\System\ado\msado15.dll" \

2 no_namespace rename ("EOF", "adoEOF")

2. 在stdafx.h头文件中引入afxdb.h头文件

1 #include "afxdb.h"

3. 初始化OLE DB环境,在InitInstance文件中添加如下代码

1 if (!AfxOleInit()) {

2     return false;

3 }


至此,初始化ADO的工作已经做好,下一步就是连接数据库和打开记录集了

 

4. 在主对话框的头文件中添加两个成员变量

1 _ConnectionPtr m_pConnection_;

2 _RecordsetPtr m_pRecordset_;

5. 在主对话框的头文件中添加一个成员函数bool DB_Connection(),用于连接数据库;添加一个成员函数bool Recordset_Connection(CString sql),用于打开记录集

1 bool DB_Connection();

2 bool Recordset_Connection();

6. 在主对话框的Cpp文件中实现这两个函数

 

 1 bool CNLCDlg::DB_Connection() {

 2     HRESULT hr;

 3     try {

 4         hr = m_pConnection_.CreateInstance(__uuidof(Connection));

 5         if (SUCCEEDED(hr)) {

 6             _bstr_t strConnect = "driver={sql server};server=(local);uid=;pwd=;database=DB_NLC";

 7             hr = m_pConnection_->Open(strConnect, "", "", adConnectUnspecified);

 8             if (FAILED(hr)) {

 9                 AfxMessageBox(_T("连接数据库失败!"));

10                 return FALSE;

11             }

12         } else {

13             AfxMessageBox(_T("创建Connection对象失败!"));

14             return FALSE;

15         }

16     } catch (_com_error e) {

17         _bstr_t bstrSource = e.Source();

18         _bstr_t bstrDescription = e.Description();

19         AfxMessageBox(bstrSource + " " + bstrDescription);

20         return FALSE;

21     }

22     return TRUE;

23 }
 1 bool CNLCDlg::Recordset_Connection(CString sql) {

 2     HRESULT hr;

 3     try {

 4         hr = m_pRecordset_.CreateInstance(__uuidof(Recordset));

 5         if (FAILED(hr)) {

 6             AfxMessageBox(_T("创建记录集失败!"));

 7             return FALSE;

 8         } else {

 9             hr = m_pRecordset_->Open(_variant_t(sql), 

10                                      m_pConnection_.GetInterfacePtr(),

11                                      adOpenDynamic,

12                                      adLockOptimistic,

13                                      adCmdText);

14             if (FAILED(hr)) {

15                 AfxMessageBox(_T("打开记录集失败!"));

16                 return FALSE;

17             }

18         }

19     } catch (_com_error e) {

20         _bstr_t bstrSource = e.Source();

21         _bstr_t bstrDescription = e.Description();

22         AfxMessageBox(bstrSource + " " + bstrDescription);

23         return FALSE;

24     }

25     return TRUE;

26 }

 

你可能感兴趣的:(数据库)