1. 导入dll,使用命名空间。
a.在stdafx.h里加入如下语句:
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename("EOF","adoEOF"), rename("BOF","adoBOF")
b.在需要使用的文件里使用命名空间
using namespace ADODB;
c.在使用之前加上
CoInitialize(NULL);
使其初始化。否则提示空指针错误。
2. 连接。
a.新建一个_ConnectionPtr类型的变量
m_conn.CreateInstance(__uuidof(Connection));
b.connStr连接字符串书写:
//03使用
//conStr = _T("Provider=Microsoft.Jet.OLEDB.4.0;")
// _T("Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;")
// _T("Jet OLEDB:Database Password=");
//07
conStr = _T(
"Provider=Microsoft.ACE.OLEDB.12.0;"
)
_T(
"Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;"
)
_T(
"Jet OLEDB:Database Password="
);
|
c.调用Open函数,
m_conn->Open(connStr,"","",-1);
3. 查询并返回结果。
建立一个结果集变量
_RecordsetPtr Ptr = NULL; Ptr.CreateInstance(__uuidof(Recordset));
构造sql语句:
CString sql = _T("SELECT* FROM GroupManage"); _bstr_t sqlToExecute = sql;//可直接转换!
执行sql语句:
Ptr = m_conn->Execute(sqlToExecute,NULL,adCmdText);
从结果集取数据:
_variant_t roader; roader = Ptr->GetCollect(_T("gName"));
4. 关闭连接
m_conn.Close();
5. 需要注意的几个地方:
1. 连接与查询都需要使用try...catch...结构。
2. 错误信息的可以用MessageBox打印出来,代码如下:
3. Group是数据库保留的关键字,用来当表名的话会导致IDispatch error #3092的错误。
一个完整的过程如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
//连接
CString conStr;
//03使用
//conStr = _T("Provider=Microsoft.Jet.OLEDB.4.0;")
// _T("Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;")
// _T("Jet OLEDB:Database Password=");
//07
conStr = _T(
"Provider=Microsoft.ACE.OLEDB.12.0;"
)
_T(
"Data Source=e:\\MSC\\trunk\\MSPMS\\Database\\TreeGroup\\TreeGroup.accdb;"
)
_T(
"Jet OLEDB:Database Password="
);
try
{
m_conn.CreateInstance(__uuidof(Connection));
_bstr_t conStr_=conStr;
m_conn->Open(conStr_,
""
,
""
,-1);
}
catch
(_com_error& e)
{
CString errormessage;
errormessage.Format(_T(
"连接StatusT.mdb数据库失败!\r\n错误信息:%s"
),e.ErrorMessage());
MessageBox(errormessage);
return
;
}
//查询
CString sql = _T(
"SELECT* FROM GroupManage"
);
_bstr_t sqlToExecute = sql;
//1.新建结果集,并将其值赋为空
_RecordsetPtr Ptr = NULL;
//2.try...catch...结构来进行读取数据
try
{
Ptr.CreateInstance(__uuidof(Recordset));
Ptr = m_conn->Execute(sqlToExecute,NULL,adCmdText);
_variant_t roader;
while
(!Ptr->adoEOF)
//读取gName字段,并依次弹出MsgBox显示
{
roader = Ptr->GetCollect(_T(
"gName"
));
if
(roader.vt != VT_NULL)
{
MessageBox((
LPCTSTR
)(_bstr_t)roader);
}
Ptr->MoveNext();
}
Ptr->Close();
}
catch
(_com_error& e)
{
CString errorMsg;
errorMsg.Format(_T(
"错误信息是:%s"
),e.ErrorMessage());
MessageBox(errorMsg);
return
;
}
//关闭连接
m_conn->Close();
|