分享

在Visual C++中如何利用UDL文件来建立ADO连接

 MikeDoc 2011-02-21

Visual C++中如何利用UDL文件来建立ADO连接

  使用通用数据连接文件(*.UDL,以下简称文件)来创建ADO连接,可以和ODBC一样可视化地定义要连接的数据源,从而实现数据访问的透明性。

  1.使用UDL文件来创建ADO连接

  创建ADO的连接,首先要设置ADO连接对象的ConnectionString属性,该属性提供所要连接的数据库类型、数据所处服务器、要访问的数据库和数据库访问的安全认证信息。比较专业的方法是在ConnectionString中直接提供以上信息,下面是访问不同类型数据源设置ConnectionString的标准:

访问ODBC数据

"Provider=MSDASQL;DSN=dsnName;UID=userName;PWD=userPassword;"

访问ORACLE数据库

"Provider=MSDAORA;Data Source=serverName;User ID=userName; Password=userPassword;"

访问MS SQL数据库

"Provider=SQLOLEDB;Data Source=serverName;Initial Catalog=databaseName; User ID=userName;Password=userPassword;"

访问ACCESS 数据库

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassword;" 

  上述的连接属性设置标准随着数据源的类型不同而变化,软件用户常常不习惯这种设置方式,都希望有可视化的数据源设置方法。为此Microsoft提供了通用数据连接文件(.UDL)来建立和测试ADO连接属性。ADO连接对象可以很方便地使用UDL文件来连接数据源,下面例子使用my_data1.udl来创建ADO连接。

_ConnectionPtr m_pDBConn;

m_pDBConn.CreateInstance(__uuidof(Connection));

m_pDBConn->ConnectionString ="File Name=c:\mydir\my_data1.udl";

m_pDBConn->Open("","","",NULL); 

 

  这样一来无论数据源如何变化,在软件中都可以用统一的方法编程。当数据源改变时,只要双击相应的udl文件即可可视化地设置数据源,无需更改软件。

  因为ADOCOM接口,为了软件的可靠性,打开ADO连接时,可以加入异常处理代码。

try{

m_pDBConn->Open("","","",NULL);

}catch(_com_error &e){

//处理异常的代码

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

m_pDBConn=NULL;

} 

  因为_ConnectionPtr m_pDBConn是智能指针,应在处理异常代码时将智能指针设为NULL后将自动将引用计数降为0

  如果不出现异常,只要在使用完m_pDBConn,只要引用Close方法即可。

 

  2.创建你所需的UDL文件

  在你所想创建UDL文件的目录中单击右键,选择从菜单 新建|Microsoft 数据连接,然后将新创建的UDL文件更改为你所希望的文件名(.UDL扩展名不能改变)。

  注:如果操作系统是Window 2000,先创建一个文本文件,再将该文本文件的扩展名改为 "udl"

  然后双击所创建的UDL文件,即可视化地完成数据源的设定。


完整示例如下:


#include <iostream>
//#import "C:\program files\common files\system\ado\msado15.dll"  no_namespace rename("EOF","adoEOF")
#import "msado25.tlb" rename("EOF", "adoEOF")

using namespace std;
using namespace ADODB;

#pragma warning(disable: 4146)  // unary minus operator applied to unsigned type

int main()
{   
    _ConnectionPtr m_pconnection=NULL;
    CoInitialize(NULL);
    m_pconnection.CreateInstance(__uuidof(Connection));
    if (NULL == m_pconnection)
    {
        cout<<"The pointer is null!"<<endl;
        return -1;
    }
   
    try
    {
        m_pconnection->ConnectionString = "File Name=1.udl";
        m_pconnection->Open("","","",NULL);
        cout<<"Connect database success!"<<endl;
        _RecordsetPtr m_pRecordSet;
        m_pRecordSet.CreateInstance(__uuidof(Recordset));
        m_pRecordSet->Open("select * from RefEquipmentType_BSS",
            (IDispatch *)m_pconnection,
            adOpenStatic,
            adLockReadOnly,
            adCmdText
            );
        while (!m_pRecordSet->adoEOF)
        {
            _variant_t tempData0=m_pRecordSet->GetCollect((_variant_t)(long)0);
            _variant_t tempData1=m_pRecordSet->GetCollect((_variant_t)(long)1);
            cout<<tempData0.iVal<<" : "<<tempData1.bstrVal<<endl;
            m_pRecordSet->MoveNext();
        }
    }
    catch (_com_error e)
    {
        cout<<e.ErrorMessage()<<endl;
    }
    return 0;
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多