我发现很多语言都用这种方法,来简化编程时的难度和开发速度
所以,我去查询了一些资料,看到一些像"金质通用数据访问类"这样的,简化开发难度的东西
不知,这种类,都是自己写的,还是说有正式一点的!!感觉每次用VC开发数据库时,类型转换和对象设置好麻烦,是不是有些成熟的开发方法我不知道
大家都使用什么方法简化?请高手指明!!!!小弟感激不尽

解决方案 »

  1.   

    熟悉ADO操作过程,就简单了,通用的简单,但不见得适用自己得需求
      

  2.   

    用不着吧,其实很简单的,和VB差不多,你可以定义一个类,加些方法和变量。
    例如getValue(CString fieldName),要搞清Variant变量的用法,主要是其vt类型对应的c++(或者mfc类型),如VT_NULL就是空,VT_Bool就是bool,然后全部返回为CString ,反正不是要显示出来吗?当然根据需要把经常用的写好就行了。
      

  3.   

    // ADOConn.h: interface for the ADOConn class.
    //
    ////////////////////////////////////////////////////////////////////////几点说明:
    //(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
    //(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
    //msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned ////////////////////////////////////////////////////////////////////////////////////////////////
    #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")#if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
    #define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_#if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000class ADOConn  
    {
    // 定义变量
    public:
    //添加一个指向Connection对象的指针:
    _ConnectionPtr m_pConnection;
    //添加一个指向Recordset对象的指针:
    _RecordsetPtr m_pRecordset;
    // 定义方法
    public:
    ADOConn();
    virtual ~ADOConn();
    // 初始化—连接数据库
    void  OnInitADOConn();
    // 连接数据库,供登录时测试用
    void  TestADOConn(CString servername,CString username,CString password);
    // 执行查询
    _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
    // 执行SQL语句,Insert Update _variant_t
    BOOL ExecuteSQL(_bstr_t bstrSQL);
    void ExitConnect();
    };#endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
    // ADOConn.cpp: implementation of the ADOConn class.
    //
    //////////////////////////////////////////////////////////////////////#include "stdafx.h"
    #include "ADOConn.h"#ifdef _DEBUG
    #undef THIS_FILE
    static char THIS_FILE[]=__FILE__;
    #define new DEBUG_NEW
    #endif//////////////////////////////////////////////////////////////////////
    // Construction/Destruction
    //////////////////////////////////////////////////////////////////////ADOConn::ADOConn()
    {}ADOConn::~ADOConn()
    {}// 初始化—连接数据库
    void  ADOConn::OnInitADOConn()
    {
    // 初始化OLE/COM库环境 
    ::CoInitialize(NULL);
      
    try
    {
    // 创建Connection对象
    m_pConnection.CreateInstance("ADODB.Connection");
    // 设置连接字符串,必须是BSTR型或者_bstr_t类型
    _bstr_t strConnect = "Provider=SQLOLEDB; Server=192.168.0.14;Database=xjgl; uid=sa; pwd=sa;";
    m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    // 捕捉异常

    catch(_com_error e)
    {
    // 显示错误信息
    AfxMessageBox(e.Description());
    }
    }//以下用于测试数据库联接
    void ADOConn::TestADOConn(CString servername,CString username,CString password)
    {
    // 初始化OLE/COM库环境 
    ::CoInitialize(NULL);
    try
    {
    // 创建Connection对象
    m_pConnection.CreateInstance("ADODB.Connection");
    // 设置连接字符串,必须是BSTR型或者_bstr_t类型
    _bstr_t strConnect = "Provider=SQLOLEDB; Server=" + servername + ";Database=xjgl; uid=" + username + "; pwd=" + password + ";"; m_pConnection->Open(strConnect,"","",adModeUnknown);
    }
    // 捕捉异常

    catch(_com_error e)
    {
    // 显示错误信息
    AfxMessageBox(e.Description());
    }
    }
    // 执行查询
    _RecordsetPtr&  ADOConn::GetRecordSet(_bstr_t bstrSQL)
    {
    try
    {
    // 连接数据库,如果Connection对象为空,则重新连接数据库
    if(m_pConnection==NULL)
    OnInitADOConn();
    // 创建记录集对象
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    // 取得表中的记录
    m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
    }
    // 捕捉异常
    catch(_com_error e)
    {
    // 显示错误信息
    AfxMessageBox(e.Description());
    }
    // 返回记录集
    return m_pRecordset;
    } // 执行SQL语句,Insert Update _variant_t
    BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
    {
    // _variant_t RecordsAffected;
    try
    {
    // 是否已经连接数据库
    if(m_pConnection == NULL)
    OnInitADOConn();
    // Connection对象的Execute方法:(_bstr_t CommandText, 
    // VARIANT * RecordsAffected, long Options ) 
    // 其中CommandText是命令字串,通常是SQL命令。
    // 参数RecordsAffected是操作完成后所影响的行数, 
    // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
    // adCmdProc-存储过程;adCmdUnknown-未知
    m_pConnection->Execute(bstrSQL,NULL,adCmdText);
    return true;
    }
    catch(_com_error e)
    {
    AfxMessageBox(e.Description());
    return false;
    }
    }void ADOConn::ExitConnect()
    {
    // 关闭记录集和连接
    if (m_pRecordset != NULL)
    m_pRecordset->Close();
    m_pConnection->Close();
    // 释放环境
    ::CoUninitialize();
    }