最近做毕业设计,MFC中要用到数据库,对于我这个菜鸟,数据库接触的不是很多,而在这个项目中我主要使用了ADO动态链接库,现在就把项目中遇到的问题在这里总结一下,希望老鸟勿喷,也希望大家有什么好的意见提出来。
2、在VC++中使用ADO编程
ADO中最重要的对象有三个:Connection、Command和Recordset,它们分别表示连接对象、命令对象和记录集对象,在vc中分别对应_ConnectionPtr,_CommandPtr,_RecordsetPtr,接下来简单介绍下这三个类的作用。
_ConnectionPtr接口返回一个记录集或一个空指针。通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。使用 _ConnectionPtr接口返回一个记录集不是一个好的使用方法。对于要返回记录的操作通常用_RecordserPtr来实现。而用 _ConnectionPtr操作时要想得到记录条数得遍历所有 记录,而用_RecordserPtr时不需要。
_CommandPtr接口返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,你可以利用全局 _ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接 串。如果你只执行一次或几次数据访问操作,后者是比较好的选择。但如果你要频繁访问数据库,并要返回 很多记录集,那么,你应该使用全局_ConnectionPtr接口创建一个数据连接,然后使用_CommandPtr 接口执 行存储过程和SQL语句。
_RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定,游标控制等。同_CommandPtr接口一样,它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给 _RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集, 最好的方法是同Command对象一样使用已经创建了数据连接的全局_ConnectionPtr接口,然后使用 _RecordsetPtr执行存储过程和SQL语句。
3、调用步骤如下:
(1)在stdafx.h导入动态链接库
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
这行代码声明“在工程中使用ADO但不使用ADO的名字空间,并且为了避免常熟冲突将常熟EOF改为adoEOF.
(2)在App::InitInstance()中初始化OLE/COM库
if(!AfxOleInit())
{
AfxMessageBox("初始化OLE DLL失败");
return FALSE;
}
在DoModal()之前调用
(3)创建ADO Recordset,ADO Command,ADO Connection对象并初始化。
//创建
_RecordsetPtr m_pRecord; //ADO Recordset对象
_CommandPtr m_pCommand; //ADO Command对象
_ConnectionPtr m_pConnect; //ADO Connection对象
//初始化
try
{
m_pConnect.CreateInstance("ADODB.Connection"); //创建ADO Connection对象
m_pCommand.CreateInstance("ADODB.Command"); //创建ADO Command
m_pRecord.CreateInstance("ADODB.Recordset"); //创建ADO Recordset
m_pConnect->ConnectionString = (_bstr_t)m_ConnectStr.AllocSysString(); //设置ADO Connection对象的连接字符串
m_pConnect->Open("","","",-1); //打开数据库
}
catch(_com_error &err)
{
//显示错误信息
MessageBox(NULL,"数据库初始化失败","提示",MB_ICONINFORMATION);
}
今天先到这里,后期补上!!!