在此次上机作业中,使用了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<<"数据读取失败!"; } }数据库已成功连接,下面进行对数据库的操作。