VC++中调用ADO的常用方法[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 ado_database 的 blog

对于在windows上编写数据库程序的程序员来说,activex data objects (ado) 是最常使用的技术了,通过ado可以简单的实现数据库的连接以及数据访问。但是在vc++中使用ado时,却因为是使用com的方式来调用,常常出现一些系统无法编译通过,或使用中程序非法出错的问题,在这里想大概介绍一下VC++中调用ado的常用方法。

1、 用import导入ado 的 com 文件msado15.dll

例如:

  #import "c:\program files\common files\system\ado\msado15.dll"\

   no_namespace


2、com 使用时初始化

hresult cominit()
{
    hresult hr = s_ok;             // 默认返回值
    if failed(coinitialize(null))  // com 初始化调用
    {
        couninitialize();
        hr = e_unexpected;
    }
    return hr;
}


3、建立数据库连接

hresult connecttodb( lpstr puserid ,                    // 用户名
                     lpstr pconnstring,                 // 连接字串
                     lpstr puserpassword ,              // 用户密码
                     connectoptionenum connectoption )  // 连接参数
{

    hresult hr = s_ok;        // 默认返回值
    _connectionptr ptrconn;   // 定义connection对象

    try
    {
        // 创建一个连接实体
        hr = ptrconn.createinstance( __uuidof(connection) );

        // 设定连接等待的最大秒数,默认是15秒
        ptrconn->connectiontimeout = 20

        // 打开连接
        hr = ptrconn->open( pconnstring, puserid, puserpassword, connectoption );
        return hr;
    }
    catch( _com_error & pcomerror )
    {
        …… // 错误处理
        return e_unexpected;
    }
}


4.执行一个sql 查询,得到数据集(recordset)

_recordsetptr getrecordset( lpstr strsql, _connectionptr ptrconn )
{
    try
    {
        recordsetptr ptrrs; // recordset 对象

        // 创建recordset 对象实体
        ptrrs.createinstance( __uuidof(recordset) );
        ptrrs->open( strsql, ptrconn.getinterfaceptr(), adopenforwardonly,
adlockunspecified, adcmdtext );

        或者
        ptrrs = ptrconn ->execute( m_ strsql,null, adcmdtext );
        return ptrrs;
    }
    catch( _com_error & a_pcomerror )
    {
        ….// 错误处理
        return null;
    }
}


5.通过数据集(recordset)得到列的名称

hresult getcolumnnames( _recordsetptr ptrrs,        // recordset 对象
                        char strcolnames[][255],
                        datatypeenum icoltypes[] )
{
    try
    { // 参数变量
        _variant_t l_vaindex;

        l_vaindex.vt = vt_i2;

        // columns总数
        long lcolcount;

        lcolcount = ptrrs ->fields->count;

        // 循环取得列的属性和名称
        for( int iindex = 0 ; iindex < lcolcount; iindex++ )
        {
            l_vaindex.ival = iindex; // 设置循环索引

本文关键:VC++中调用ADO的常用方法
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top