zoukankan      html  css  js  c++  java
  • 利用vc6.0进行ADO编程的简单例子

     
     -
    主  题:
    请问:利用vc进行ADO编程,要加哪些头文件,是不是要再装什么东西??
    本人一直想用vc用ADO对数据库进行操作,苦于一直未能如愿!
                还请各位侠客指教!!!
                
    回复人: spwnihao(面鱼) ( ) 信誉:100 2002-09-06 15:25:45Z 得分:0
    ?
    使用ADO前必须在工程的stdafx.h文件最后用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
                            #import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
                            
    Top
    回复人: spwnihao(面鱼) ( ) 信誉:100 2002-09-06 15:26:37Z 得分:0
    ?
    ActiveX数据对象(ADO)是OLE DB上面的高层数据库API。我们在C++程序中也可以调用ADO。本文将在VC 6.0环境下做一个小小的例子解释如何使用ADO。
                              1. 生成应用程序框架并初始化OLE/COM库环境
                              创建一个标准的MFC AppWizard(exe)应用程序,然后在应用程序类的InitInstance函数中初始化OLE/COM库(因为ADO库是一个COM DLL库)。
                              BOOL CADOTestApp::InitInstance()
                              { //初始化OLE/COM库环境
                            AfxOleInit();}
                              2. 引入ADO库文件
                              使用ADO前必须在工程的stdafx.h文件里用直接引入符号#import引入ADO库文件,以使编译器能正确编译。代码如下:
                               #include 〈comdef.h〉
                               #import "c:\program files\common files\system\ado\msado15.dll"
                               no_namespace
                               rename ("EOF","adoEOF")
                              头文件comdef.h使我们的应用程序能够使用Visual C++中的一些特殊COM支持类,这些类使得处理OLE自治更为容易一些,OLE自治是ADO使用的数据类型。后三行使用#import指令在我们的应用程序中输入ADO类库定义。
                              ADO类的定义是作为一种资源存储在ADO DLL(msado15.dll)中,在其内部称为类型库。类型库描述了自治接口,以及C++使用的COM vtable接口。当使用#import指令时,在运行时Visual C++需要从ADO DLL中读取这个类型库,并以此创建一组C++头文件。这些头文件具有.tli 和.tlh扩展名,读者可以在项目的目录下找到这两个文件。在C++程序代码中调用的ADO类要在这些文件中定义。
                              程序的第三行指示ADO对象不使用名称空间。在有些应用程序中,由于应用程序中的对象与ADO中的对象之间可能会出现命名冲突,所以有必要使用名称空间。如果要使用名称空间,则可把第三行程序修改为: rename_namespace("AdoNS")。第四行代码将ADO中的EOF(文件结束)更名为adoEOF,以避免与定义了自己的EOF的其他库冲突。
                              3.利用智能指针进行数据库操作
                              在CaboutDlg头文件中定义两个ADO智能指针类实例,并在对话框中加入一个ListCtrl。
                            _ConnectionPtr m_pConnection;
                            _RecordsetPtr m_pRecordset;
                              ClistCtrl m_List;
                              ADO库包含三个智能指针:_ConnectionPtr、_CommandPtr和_RecordsetPtr。
                            _ConnectionPtr通常被用来创建一个数据连接或执行一条不返回任何结果的SQL语句,如一个存储过程。
                            _CommandPtr返回一个记录集。它提供了一种简单的方法来执行返回记录集的存储过程和SQL语句。在使用_CommandPtr接口时,可以利用全局_ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。
                            _RecordsetPtr是一个记录集对象。与以上两种对象相比,它对记录集提供了更多的控制功能,如记录锁定、游标控制等。
                              在OnInitDialog()中加入以下代码:
                              BOOL CAboutDlg::OnInitDialog()
                              {
                            CDialog::OnInitDialog();
                            _variant_t TheValue;
                            m_List.ResetContent();
                              m_pConnection.CreateInstance(_uuidof(Connection));
                              m_pRecordset.CreateInstance(_uuidof(Recordset));
                              try{
                            m_pConnection->Open("DSN=ADOTest","","",0); //连接叫作ADOTest的ODBC数据源
                            m_pRecordset->Open("SELECT * FROM BlockDefine",(IDispatch*)m_pConnection,
                            adOpenDynamic,
                            adLockOptimistic,
                            adCmdText);
                              //执行SQL语句得到一个记录集
                               while(!m_pRecordset->adoEOF)
                              //遍历所有记录
                               {
                               TheValue = m_pRecordset->GetCollect("BlockIndex");
                              //得到字段BlockIndex的值
                               if(TheValue.vt!=VT_NULL)
                               m_List.AddString((char*)_bstr_t(TheValue)); //将该值加入到列表控件中
                               m_pRecordset->MoveNext();
                              }
                               m_pRecordset->Close();
                            m_pConnection->Close();
                               }
                               catch(_com_error e) //异常处理
                               {
                            AfxMessageBox(e->ErrorMessage());
                              }
                              m_pRecordset = NULL;
                            m_pConnection = NULL;
                              return TRUE; // return TRUE unless you set the focus to a control
                              }
                              程序中通过_variant_t和_bstr_t转换COM对象和C++类型的数据, _variant_t类封装了OLE自治VARIANT数据类型。在C++中使用_variant_t类要比直接使用VARIANT数据类型容易得多。
                              好,编译后该程序就能运行了,但记住运行前要创建一个叫ADOTest的ODBC数据源。该程序将把表BlockDefine中的BlockIndex字段值显示在列表控件中。
                            
    Top
    回复人: xglcm(我踏月色迩来) ( ) 信誉:96 2002-09-06 15:28:26Z 得分:0
    ?
    这里的例子足够让你学会ado的运用了
                            http://www.vckbase.com/code/listcode.asp?mclsid=11&sclsid=1105
                            还有文档呢?
                            
    Top
    回复人: bonoji() ( ) 信誉:115 2002-09-06 15:35:24Z 得分:0
    ?
    spwnihao(小二黑) 真是个热心肠.
                            我还有什么好说的么?
                            
    Top
    回复人: arvid_gs(west) ( ) 信誉:130 2002-09-07 15:34:21Z 得分:0
    ?
    spwnihao(小二黑) 已经说了该说的。我就不说了。如果需要例子可以
                            arvid_gs@163.com
                            
    Top

    结贴
  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number
    6. ZigZag Conversion
    5. Longest Palindromic Substring
    4. Median of Two Sorted Arrays
    3. Longest Substring Without Repeating Characters
    2. Add Two Numbers
    链式表的按序号查找
    可持久化线段树——区间更新hdu4348
    主席树——树链上第k大spoj COT
  • 原文地址:https://www.cnblogs.com/cy163/p/693369.html
Copyright © 2011-2022 走看看