`
buliedian
  • 浏览: 1238047 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

VC(实现自己的ADO类)

 
阅读更多

.H文件

// ADO.h: interface for the CADO class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ADO_H__5A466E67_5E04_445D_9CB0_C64650B9AC68__INCLUDED_)
#define AFX_ADO_H__5A466E67_5E04_445D_9CB0_C64650B9AC68__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <comdef.h>
#include "msado15.tlh"

class CADO
{
public:
_RecordsetPtr m_pRecordset;
public:
CADO();
virtual ~CADO();
BOOL openDB(CString m_strPathName, CString m_strName, CString m_strPassword, CString m_strProvider);
void close();
_RecordsetPtr search(const CString m_strSql);
BOOL dbDelete(const CString m_strSql);
BOOL update(const CString m_strSql);
BOOL insert(const CString m_strSql);
private:
void initConnection();
void initRecordSet();
void initCommand();
BOOL CommandIsValid();
BOOL RecordSetIsValid();
BOOL ConnectionIsValid();
private:
_CommandPtr m_pCommand;
_ConnectionPtr m_pConnection;

};

#endif // !defined(AFX_ADO_H__5A466E67_5E04_445D_9CB0_C64650B9AC68__INCLUDED_)

.CPP文件

// ADO.cpp: implementation of the CADO class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "YXRM.h"
#include "ADO.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CADO::CADO()
{

}

CADO::~CADO()
{

}

BOOL CADO::ConnectionIsValid()
{
if (m_pConnection == NULL)
return FALSE;
else
return TRUE;
}

BOOL CADO::RecordSetIsValid()
{
if (m_pRecordset == NULL)
return FALSE;
else
return TRUE;
}

BOOL CADO::CommandIsValid()
{
if (m_pCommand == NULL)
return FALSE;
else
return TRUE;
}

void CADO::initConnection()
{
if (!ConnectionIsValid())
m_pConnection.CreateInstance( __uuidof(Connection));
}

void CADO::initRecordSet()
{
if (!RecordSetIsValid())
m_pRecordset.CreateInstance(__uuidof(Recordset));
}

void CADO::initCommand()
{
if (!CommandIsValid())
m_pCommand.CreateInstance(__uuidof(Command));
}

BOOL CADO::openDB(CString m_strPathName, CString m_strName, CString m_strPassword, CString m_strProvider)
{
initConnection();
initRecordSet();
initCommand();
m_pConnection->Provider = _bstr_t(m_strProvider);
if(S_OK == m_pConnection->Open(_bstr_t(m_strPathName), _bstr_t(m_strName), _bstr_t(m_strPassword), adModeUnknown))
return TRUE;
else
return FALSE;
}

void CADO::close()
{
if (RecordSetIsValid())
{
if( m_pRecordset->State == adStateOpen)
m_pRecordset->Close();
}
if (ConnectionIsValid() || m_pConnection->State == adStateOpen)
{
m_pConnection->Close();
}
}

BOOL CADO::insert(const CString m_strSql)
{
try
{
if (!ConnectionIsValid() || m_pConnection->State == adStateClosed)
{
AfxMessageBox("DB closed");
//RAConnect(m_ConnectionString);
return FALSE;
}

if(!CommandIsValid())
{
initCommand();
}

m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandType = adCmdText;
m_pCommand->CommandText = _bstr_t(m_strSql);

_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;

m_pCommand->Execute(&vNull, &vNull, adCmdText);//m_pConnection->Execute(........)也可以

return TRUE;
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return FALSE;
}
}

BOOL CADO::update(const CString m_strSql)
{
try
{
if (!ConnectionIsValid() || m_pConnection->State == adStateClosed)
{
AfxMessageBox("DB closed");
//RAConnect(m_ConnectionString);
return FALSE;
}

if(!CommandIsValid())
{
initCommand();
}

m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandType = adCmdText;
m_pCommand->CommandText = _bstr_t(m_strSql);

_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;

m_pCommand->Execute(&vNull, &vNull, adCmdText);

return TRUE;
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return FALSE;
}
}

BOOL CADO::dbDelete(const CString m_strSql)
{
try
{
if (!ConnectionIsValid() || m_pConnection->State == adStateClosed)
{
AfxMessageBox("DB closed");
//RAConnect(m_ConnectionString);
return FALSE;
}

if(!CommandIsValid())
{
initCommand();
}

m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandType = adCmdText;
m_pCommand->CommandText = _bstr_t(m_strSql);

_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;

m_pCommand->Execute(&vNull, &vNull, adCmdText);

return TRUE;
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return FALSE;
}
}

_RecordsetPtr CADO::search(const CString m_strSql)
{
try
{
if (!ConnectionIsValid() || m_pConnection->State == adStateClosed)
{
AfxMessageBox("DB closed");
//RAConnect(m_ConnectionString);
return NULL;
}
else
{
if (RecordSetIsValid())
{
if (m_pRecordset->State == adStateOpen)
m_pRecordset->Close();
}
else
{
initRecordSet();
}

if(!CommandIsValid())
{
initCommand();
}

m_pCommand->ActiveConnection = m_pConnection;
m_pCommand->CommandType = adCmdText;
m_pCommand->CommandText = _bstr_t(m_strSql);

_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;

m_pRecordset = m_pCommand->Execute(&vNull, &vNull, adCmdText);
return m_pRecordset.Detach();
}
}
catch(_com_error &e)
{
AfxMessageBox(e.Description());
return NULL;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////调用/////////////////////////////////////////////

if(!(classAdo.openDB("db1.mdb","","","Microsoft.JET.OLEDB.4.0")))
return FALSE;

分享到:
评论
1 楼 放纵思想 2012-06-13  
写的不怎么样。

通用性太差。

相关推荐

    VC使用ADO简单示例

    2. **VC编程封装ADO类**:在VC项目中,通常会创建类来封装ADO对象,这样可以提高代码的可读性和可维护性。例如,可以创建一个CDatabase类,封装Connection对象,以及CRowset类,封装Recordset对象。这些类可以包含...

    VC下利用ADO操作数据库类和文件目录操作类

    在提供的文件"WXPDatabase20170507"中,可能包含了这样的类定义和实现,通过阅读和学习这些代码,你可以更深入地理解如何在VC++环境下利用ADO操作数据库以及进行文件目录操作。同时,注意在实际应用中,应考虑到错误...

    VC++ 封装的Ado操作类

    使用封装的Ado类,开发者不再需要直接处理复杂的COM接口,只需调用这些简洁的成员函数即可完成数据库操作。例如,要执行一条查询,可以这样写: ```cpp Ado ado; ado.Connect("连接字符串"); RecordsetPtr rs = ado...

    VC如何使用ADO

    ### ADO在VC中的应用详解 #### 一、ADO概述 **ActiveX Data Objects (ADO)** 是微软为OLE DB设计的一套高级数据访问接口。它旨在简化开发人员使用OLE DB来访问和操作数据库中的数据的过程。ADO的主要优势在于其...

    VC中操作ADO数据库资料.rar_VC ADO sql_sqlserver_vc ado sql server_vc sql

    6. **VC编程封装ADO类**: 为了提高代码的可读性和可维护性,开发者常常会创建自定义的类来封装ADO对象。这部分可能介绍了如何设计这样的类,以及如何通过封装来简化数据库操作的代码。 7. **设置ODBC的自定义类...

    使用VC6进行ADO编程.rar_ADO_VC6_VC6 ado_ado vc

    在VC6中,ADO编程主要通过包含Microsoft的库文件和头文件来实现。首先,你需要确保安装了Data Access Components (DAC) 或者 MDAC (Microsoft Data Access Components),这是ADO的基础。然后,在项目设置中添加适当...

    ADO_VC.rar_ADO_access 数据库_ado c++_ado vc_vc ado

    6. **ADO Provider**:ADO Provider是实现ADO与特定数据源通信的组件。不同的Provider对应不同的数据库系统,比如Microsoft Jet Provider用于访问Access数据库,而SQL Server则有其自己的SQL Native Client Provider...

    vc.net_ADO_MSSQL.RAR_SQL 封装类_SQL VC 学生_VC.NET 数据库_c++ ado访问类

    标题中的"vc.net_ADO_MSSQL.RAR_SQL 封装类_SQL VC 学生_VC.NET 数据库_c++ ado访问类"揭示了主要的技术栈和目标。VC++.NET是Microsoft的C++编译器与.NET框架的结合,用于构建Windows应用程序。ADO是Microsoft提供的...

    ado+access实例VC6.0

    这些示例可以帮助你理解如何在VC6.0环境下,通过ADO接口实现对Access数据库的增删改查操作,从而提升你的数据库编程技能。 总结来说,"ado+access实例VC6.0"是关于如何在Visual C++ 6.0中利用MFC和ADO库来访问和...

    VC开发用ADO访问数据库详尽攻略

    ### VC开发用ADO访问数据库详尽攻略 #### ADO概述 ...总之,通过上述步骤,开发者可以有效地利用 ADO 在 VC++ 中实现数据库访问功能。这些基础知识对于理解和掌握 ADO 在 VC++ 开发中的应用至关重要。

    vc 实现员工管理系统 登陆+ADO数据库编程

    总结,通过VC实现员工管理系统,我们需要熟练掌握ADO数据库编程,创建用户友好的登录界面,并设计有效的数据验证和操作机制。在实际项目中,还需要考虑错误处理、性能优化以及系统的可维护性和可扩展性。通过不断...

    vc++下可以使用的ADO封装类

    通过阅读和理解`AdoRecordSet.cpp`、`Ado.cpp`和`AdoCommand.cpp`中的源代码,开发者可以更好地掌握这些类的内部实现和使用方式,进一步优化自己的数据库应用程序。同时,`AdoRecordSet.h`、`Ado.h`和`AdoCommand.h`...

    VC 结合ADO实现数据库版的DTree树叉菜单.rar

    VC 结合ADO实现数据库版的DTree树叉菜单,这是一个与数据库相结合的树形菜单效果,在使用ADO技术时,需要导入一个ADO动态链接库msado15.dll,该动态库位于系统盘下的“Program Files\Common Files\System\ado\”目录...

    vc-ado数据库实例源代码

    总之,结合Visual C++和ADO,开发者可以高效地实现与各种数据库的交互。"vc-ado数据库实例源代码"提供了实际操作的经验,对于想要深入了解或提升这方面技能的人来说,是一份不可多得的学习材料。

    ADO技术(VC实现)

    ADO是一种基于com的数据库访问技术,它向用户提供了一组访问数据库的接口,用户可以在应用程序中通过这些接口类实现对数据库的各种操作。 设计一个电话本程序,包括电话号码的添加、更新和删除功能。 (1) 设计...

    VC Ado数据库操作类(ado2)

    `VC ADO数据库操作类(ado2)`是一个专门为VC++设计的类库,简化了数据库操作,使开发者能够更加高效地处理数据库任务。 `ado2.cpp`和`ado2.h`是这个类库的核心文件,其中`ado2.cpp`包含了类库的实现细节,而`ado2.h`...

    VC 使用 ADO连接的例程

    【VC 使用 ADO连接的例程】涉及到的关键技术是通过Visual C++(VC)使用ActiveX Data Objects(ADO)来连接和操作数据库,尤其是利用连接池技术提高性能和效率。ADO是一个面向对象的编程接口,它通过OLE DB提供的COM...

    自己封装ADO类

    在编程领域,ADO(ActiveX Data Objects)是微软提供的一种数据访问接口,用于与各种数据库进行交互,包括但不限于...通过进一步研究提供的"封装ADO类"源代码,你可以更好地理解这种封装方式的具体实现和优势。

    VC ADO数据库编程

    "VC ADO数据库编程"是关于使用Visual C++(VC++)与ActiveX Data Objects(ADO)进行数据库交互的技术。在Windows应用程序开发中,VC++是一个常见的工具,它允许程序员使用C++语言创建高效的桌面应用。而ADO是Microsoft...

    vc ado 数据库解析

    ### VC ADO 数据库解析全攻略 #### 一、ADO技术概述 ADO(ActiveX Data Objects)是微软推出的一种...对于那些希望在VC中实现数据库功能但又不想过多地陷入复杂细节的开发者来说,使用ADO无疑是一个非常好的选择。

Global site tag (gtag.js) - Google Analytics