WEB开发网
开发学院软件开发VC 使用ADO封装类的数据库程序开发实例(下) 阅读

使用ADO封装类的数据库程序开发实例(下)

 2008-04-19 20:27:56 来源:WEB开发网   
核心提示:五、开始编写ADO应用程序.使用ADO之前,我们另外还需要添加下面的语句,如此把ADO的库引入到工程中. #import "c:\program files\common files\system\ado\msado15.dll"no_namespace rename("EOF"

五、开始编写ADO应用程序.

使用ADO之前,我们另外还需要添加下面的语句,如此把ADO的库引入到工程中

. #import "c:\program files\common files\system\ado\msado15.dll"
    no_namespace rename("EOF","adoEOF")

根据机器安装时候的设置不同具体的路径可能不一样。

另外编译的时候会出现如下的警告信息:

msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned

MSDN建议我们不要理会。如果你实在不想看到的话可以在stdafx.h中加入一行下面的代码:

#pragma warning(disable:4146)

这样这个警告信息就不会再出现了。

ADO使用了COM,所以在使用ADO之前,必须对COM进行了初始化,否则无法使用.你可以使用AfxOleInit()来初始化,但只能初始一次,你不能多次调用此函数,建议你在应用程序的APP类的InitInstance方法中进行初始化.

上面这些一般相关的资料都有详细说明,因此我就不细说了,下面我们来看看如何我封装的两个类。

六、ADO封装类:CAdoConnection 和 CAdoRecordSet

首先当然是要连接到数据源了,连接到数据源的函数是_CAdoConnection的Connect方法,它封装了ADO连接对象的CreateInstance和Open方法:

我们来看看我是如何封装的:

BOOL CAdoConnection::Connect(LPCTSTR strConnect, long lOptions)
{
  m_strConnect = strConnect;
  try
  {
    ///创建 Connection 对象---------------------------
    HRESULT  hr = m_pConnection.CreateInstance("ADODB.Connection");
    if (SUCCEEDED(hr))
    {
      // 连接数据库---------------------------------------------
      if (SUCCEEDED(m_pConnection->Open(strConnect, "", "", lOptions)))
      {  
        return TRUE;
      }
    }
  }
  catch (_com_error e)
  {
    TRACE(_T(":( 连接数据库发生错误: %s\n"), e.ErrorMessage());
    return FALSE;
  }
  catch (...)
  {
    TRACE(_T(":( 连接数据库时发生未知错误:"));
  }
  return FALSE;
}

使用之前先定义一个CAdoConnection 类对象如m_adoConnection,例如:

CString strSrcName = "E:\\Access\\datebase.mdb";//假设在e盘有这样一个access的数据库文件
CString strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strSrcName;
m_adoConnection.Connect(LPCSTR(strConnect));

这样就连接到数据源了.

接着就是要打开记录集了,下面我对它的open方法的封装:使用进你可以忽略后面的三个参数,直接把一个SQL语句传给它.

HRESULT CAdoRecordSet::Open(LPCTSTR strSQL,
      long lOption,
      CursorTypeEnum CursorType,
      LockTypeEnum LockType)
{
  try
  {
    if (m_pConnection == NULL)
    {
      return -1;
    }
    else if (m_pRecordset == NULL)
    {
      m_pRecordset.CreateInstance("ADODB.Recordset");
    }
    
    m_pRecordset->Open(_bstr_t(strSQL),
      _variant_t((IDispatch*)m_pConnection->GetConnection(), true),
      CursorType, LockType, lOption);
    if (m_pRecordset == NULL)
    {
      return -1;
    }
    return (m_pRecordset->adoEOF) ? 0 : 1;
  }
  catch (_com_error e)
  {
    TRACE(_T(":( 打开记录集发生错误: %s\n"), e.ErrorMessage());
    return -1;
  }
}

例如我们可以这样来用:CAdoRecordSet rset;
rset.SetAdoConnection(&(GetDocument()->m_adoConnection));//记得要先指定相应的连接对象,否则会出错.
m_strSQL = "select * from city";//要执行的SQL语句.
rset.Open(m_strSQL);

1 2 3  下一页

Tags:使用 ADO 封装

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接