| 利用ADO在VC++中进行数据库编程 |
| 利用ADO在VC++中进行数据库编程 | ||
| 作者:YesHack 文章来源:YesHack.Com 更新时间:2006-9-20 22:40:10 【字体:小 大】 | ||
在这里我们不得不提到另一个对象RDS。Microsoft Remote Data Service (RDS)是ADO的一个组件,它为驻留在 Microsoft Internet Explorer上的应用程序提供快速有效的数据连接和数据发布框架。它是一种基于工作在 HTTP、HTTPS(在 Secure Sockets 层上的HTTP)和DCOM应用程序协议之上的客户端/服务器的分布式技术。RDS 使用数据识别ActiveX控件,向需要建立分布式、数据密集且用于企业内部网和Internet的应用程序的Web开发人员提供以Microsoft Visual Basic样式编程的数据访问。 下面我们就在Visual C++6.0中利用ADO实现一个数据库编程的实际例子,以便让大家对ADO有一个认识。 1.首先建立应用程序的框架并初始化运行环境(前面提到过ADO是用于访问数据的基于OLE DB接口访问的数据源,所以要初始化OLE/COM库环境) 利用Visual C++的MFC AppWizard(exe)创建一个标准的单文档(Single Document)应用程序(比如采用默认设置)。 2.引入ADO的库文件msado15.dll 我们在使用ADO之前必须在工程中引入ADO的库文件msado15.dll。通常我们在文件“stdAfx.h”中将其导入;以便使编译器能正确的编译同时生成我们需要的.tli和.tlh文件。 需要导入的代码如下: #include #import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF","EndofFile") 3. 利用智能指针(Smart Pointer)进行数据库操作 在CaboutDlg类的定义中定义两个ADO的智能指针类实例(后面我们会比较详细地介绍ADO中的智能指针),同时添加一个Listbox用以显示我们从数据库中获得字段值。 class CaboutDlg : public Cdialog { public: CaboutDlg(); //添加的代码 _ConnectionPtr pConn; _RecordsetPtr pRst; ClistBox m_ListBox; …… } 在ADO中的类库中包含有这样的三个智能指针,它们分别是: -ConnectionPtr,-RecordsetPtr,-CommandPtr。下面我们就针对这三个智能指针分别进行介绍: -ConnectionPtr,用来管理连接一个数据源提供者所要求的信息,并可通过Open和Close的方法来打开一个到数据源提供者的活连接(即Live Connection)。另外还可以建立和管理事务,如BeginTrans,CommitTrans和RollBackTrans。最后可以通过Excute这种方法在数据源上执行命令; -RecordsetPtr,封装数据源提供者返回的记录集合。使用该类可以浏览返回的记录,也可以插入一个新的记录,或者更新和删除一个已经有的记录; -CommandPtr,封装了一个要发送到数据库的命令串(比如通常用的SQL查询语句)。该命令可以是一个表的名字,或者一个存储过程,或者一个依赖数据源的串。 4. 添加执行代码 利用ClassWizard在CaboutDlg类中映射ON_WM_INITDIALOG消息添加一个对话框的初始化函数OnInitDialog();在该函数中添加以下的代码: BOOL CAboutDlg::OnInitDialog() { CDialog::OnInitDialog(); //添加的代码 _variant_t theValue; m_ListCtrl=(CListBox *)GetDlgItem(IDC_LIST_BOX); ASSERT(m_ListCtrl!=NULL); m_ListCtrl->ResetContent(); pConn.CreateInstance(_uuidof(Connection)); pRst.CreateInstance(_uuidof(Recordset)); try { pConn→ConnectionString="DSN=Accounts"; //设置连接字符串,利用ODBC连接Accounts 数据库 pConn→Open("","sa","",NULL); //打开连接 pRst→Open("select * from Checking-Account",(IDispatch*)pConn,adOpenDynamic,adLockOptimistic,adCmdText);//执行一个SQL获得希望得到的数据集 while (!pRst→EndofFile) { theValue=pRst→GetCollect("Owner_ID"); if (theValue.vt!=VT_NULL) m_ListCtrl→AddString((char *)_bstr_t(theValue)); pRst→MoveNext(); }//遍历记录集,获得字段Owner-ID的字段值,同时将其添加到ListBox中去 pRst→Close();//关闭记录集pRst pConn→Close(); //关闭连接pConn } catch(_com_error * e) //在这里对异常情况进行处理 { CString Error=e→ErrorMessage(); AfxMessageBox(e→ErrorMessage()); } pRst=NULL; pConn=NULL; return TRUE; } 在上述的代码中我们使用了这样一种数据类型:_variant_t ,它封装了Visual C++中的VARIANT类型(在Visual Basic中我们可能已经接触的比较多了);还有一种数据类型就是_bstr_t(宽字符型);有关这两种数据类型的详细介绍请参见MSDN。 接下来编译该工程,然后运行。怎么样,是不是觉得使用起来很方便?! |
||
|
||
| 教程录入:YesHack 责任编辑:YesHack | ||
您现在的位置: