在此次上机作业中,使用了ADO方法连接数据库。是一种程序对象,用于表示用户数据库中的数据结构和所包含的数据,可通过ADO对象和ADO的附加组件来创建或者修改表和查询、检验数据库或者访问外部数据源,还可以在代码中使用ADO来操作数据库中的数据。
2.1相关声明
首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里。然后声明两个全局的智能指针:
_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute方法来执行一个不返回结果的命令语句;
_RecordsetPtr智能指针,可以用来打开库内数据表,并可以对表内的记录、字段等进行各种操作。
#include<AFX.h>
#import "c:\program files\common files\system\ado\msado15.dll" \no_namespace \ rename ("EOF", "adoEOF") // 引用支持ADO的组件类型库
_ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;
2.2连接数据库
将连接放在Connect()函数里,在调用函数时才进行连接。这里调用了_ConnectionPtr智能指针,代码及解释如下,运行结果见下图
void Connect(){
// 初始化COM,创建ADO连接等操作
::CoInitialize(NULL);
m_pConnection.CreateInstance(__uuidof(Connection));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息
_bstr_t strConnect="Provider=SQLOLEDB;Sever=(local);Database=SPJ;uid=lsq;pwd=123456;"; // 选择连接到本地的数据库,写明uid和password,_bstr_t做中间变量
try
{
m_pConnection->Open(strConnect,"","",adModeUnknown); // 尝试连接
cout<<"数据库连接成功!"<<endl;
}
catch(_com_error e)
{
cout<<"数据库连接失败!";
}
}
2.3打开数据库内的表
以打开S表为例,使用的是_RecordsetPtr智能指针的Open,查询S表中的所有信息,查看是否可读。代码及解释如下,运行结果见下图。
void FS::Read()
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息
try
{
m_pRecordset->Open("SELECT * FROM S", // 查询S表中所有字段
m_pConnection.GetInterfacePtr(), // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
cout<<"数据读取成功!"<<endl;
}
catch(_com_error *e)
{
cout<<"数据读取失败!";
}
}
数据库已成功连接,下面进行对数据库的操作。