我对于ADO的链接 发SQL语句 发存储过程 获得结果集等均会,但是领导要我做一个对于数据库的通用类库,并自动对数据库中每个表生成自己的类库,并实现增删改查,但是我真的没有什么思路啊(呵呵面向对象我差啊)
但是独立对于单表的我已经做完了,明天我将贴出,忘各位高手给出方法:---最好有现成的代码
没有给个思路也非常感谢

解决方案 »

  1.   

    用ODBC API来从头实现比使用已经封装的MFC应该更简单
      

  2.   

    您有现成的吗?我参考一下,我现在是纯MFC和XML实现,感觉实现单表简单,直接读取数据库生成各个表的类不会啊
      

  3.   

    自动对数据库中每个表生成自己的类库?? 像java里的db reverter反转表成类实体?? 我自己实现了个..
      

  4.   

    http://happyboy200032.blog.163.com/blog/static/46903113200732075057753/
      

  5.   

    提取表名 字段名称 类型名称
    SELECT   SNAME.NAME,SCOL.NAME,STYPE.NAME,STYPE.MAX_LENGTH   
    FROM SYSOBJECTS SNAME, sys.all_columns SCOL,sys.types STYPE WHERE SNAME.TYPE='U' AND 
    SCOL.OBJECT_ID=SNAME.ID AND STYPE.SYSTEM_TYPE_ID=SCOL.SYSTEM_TYPE_ID
     ORDER BY  SNAME.NAME提取表名
    SELECT NAME,id FROM SYSOBJECTS WHERE TYPE='U'
    这些我都会,单表的我也做了,就不知道如何自动生成所有类啊
    ---ado_conn.cpp
    #include "stdafx.h"
    #include "ADO_Conn.h"
    ADO_Conn::ADO_Conn(void)
    {
    }ADO_Conn::~ADO_Conn(void)
    {
    }
    ////数据库初始设置
    //对数据库进行连接
    /*
    输入条件 无
    输出结果 无  
    */
    bool ADO_Conn::InitADOConn()
    {
    bool m_State=false;
    CoInitialize(NULL);
    pConn.CreateInstance (__uuidof(Connection));
    pRst.CreateInstance (__uuidof(Recordset));
    _bstr_t strConn;
    CString get;
        ////增加读写XML文档 
    m_State=ReadXMLToCstring("DataBaseconfig.xml","//provide",get); 
    strConn=(_bstr_t)get;    m_State=ReadXMLToCstring("DataBaseconfig.xml","//password",get); 
    strConn+=(_bstr_t)get;    m_State=ReadXMLToCstring("DataBaseconfig.xml","//security",get); 
    strConn+=(_bstr_t)get;    m_State=ReadXMLToCstring("DataBaseconfig.xml","//catalog",get); 
    strConn+=(_bstr_t)get; m_State=ReadXMLToCstring("DataBaseconfig.xml","//datasource",get); 
    strConn+=(_bstr_t)get;
    //增加错误陷阱
    try
    {
    if ( m_State==true )
    {
      pConn->ConnectionString=strConn;
              pConn->Open (strConn,"sa","123456",adConnectUnspecified);   
    }
    else
    return m_State; }
        catch(_com_error e)
    {
    AfxMessageBox("数据库无法连接!");
    m_State=false;
    return m_State;
    }}//读取XML文件到一个字符串GetCstring
    bool ADO_Conn::ReadXMLToCstring( CString XMLPath,CString NodeName,CString &GetCstring )
    {
    bool m_State=false;
    //读取XML文件
    MSXML2::IXMLDOMDocumentPtr pDoc;
    HRESULT hr;
    ::CoInitialize(NULL); //初始化COM环境
    hr=pDoc.CreateInstance(__uuidof(MSXML2::DOMDocument40));
    if(!SUCCEEDED(hr))   
    {   
        return FALSE;
    }
    CString filepath = GetFilePath(XMLPath);
    CFileFind fFind;
    BOOL b=fFind.FindFile(filepath);
    if(b==0)
    {
    AfxMessageBox("配置文件不存在!");
    return FALSE;
    }
    //赋值给 GetCstring
    ////////////////////////////////////////////////////////////////////
    pDoc->load( (_bstr_t)XMLPath ); 
    MSXML2::IXMLDOMNodePtr childNode ;
    VARIANT varVal;
    childNode = pDoc->selectSingleNode( (_bstr_t)NodeName );
    //节点值
    childNode->get_nodeTypedValue(&varVal);
    GetCstring = (BSTR)(_bstr_t)varVal;
    m_State=true;
    return m_State;
    }//获得正常的路径---C++可以识别的
    CString ADO_Conn:: GetFilePath(const char *filename)
    {
    char path[MAX_PATH];
    //GetCurrentDirectory(MAX_PATH,path);   //获取程序的当前文件夹 ,该函数得到的是可执行程序.exe所在的文件夹.....\socket&com\server
    GetModuleFileName(NULL,path,MAX_PATH); //得到程序运行的当前路径,这个路径包括可执行程序.exe.........\socket&com\server\release\server.exe  //分离路径和文件名。
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char fname[_MAX_FNAME];
    char ext[_MAX_EXT];
    _splitpath(path, drive, dir, fname, ext );
    CString str;
    str.Format("%s\%s",drive,dir);
    CString Path =str + "\\" + filename;
    return Path;
    }//关闭数据库的连接
        bool ADO_Conn::CloseConn(_ConnectionPtr & m_Conn)
    {
    bool m_State=false;
        m_Conn->Close();
    m_State=true;
    return m_State;
    }
    //关闭数据库的结果集
        bool ADO_Conn::CloseRecorderSet(_RecordsetPtr & m_Prst)
    {
    bool m_State=false;
        m_Prst.Release(); 
    m_State=true;
    return m_State;
    }
    --单表查询的贴不下啊
      

  6.   

    最简单的办法,你就封个简单的类,一般VC数据库相关的书上都有,然后根据需要写写SQL语句,不难的
      

  7.   

    就是ado操作呗
    http://blog.csdn.net/xianglitian/article/details/5617173