zoukankan      html  css  js  c++  java
  • 数据库使用步骤。

    先把对数据库的操作封装到类ADOConnection,再在App里面调用数据库的操作函数。

    在App函数里面的InitInstance()函数里面打开数据库

    ADOConnection m_adoConn;
    CUser m_curUser;
    
    InitInstance()
    
    {
    
    if ( !m_adoConn.Open( GetDBPath()))
    {
        AfxMessageBox(_T("Can't open database TrafficLED.mdb."));
        return FALSE;
    }
    
    if ( m_adoConn.IsOpen())
    {
        m_adoConn.Close();
    }
    
    }

    其中。

    CString CInfoStationApp::GetModulePath()
    {
    char chPath[MAX_PATH];
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    GetModuleFileName( NULL , chPath , MAX_PATH ); //得到当前应用程序路径
    _splitpath(chPath, drive, dir, NULL,NULL);
    CString strPath;
    strPath.Format("%s%s", drive, dir);
    return strPath;
    }
    
    CString CInfoStationApp::GetDBPath()
    {
    CString strPath = GetModulePath() + _T("TrafficLED.mdb");
    return strPath;
    
    }
    
    CString CInfoStationApp::GetIniPath()
    {
    CString strPath = GetModulePath() + _T("ProgInfo.ini");
    return strPath;
    }

    2.然后登陆

    CString strSQL = _T("SELECT * FROM [User]") ;
    _RecordsetPtr pRes = theApp.m_adoConn.ExecuteSelectSQL( strSQL );
    
    if ( pRes != NULL )
    {
    while( !pRes->adoEOF )
    {
    CString strAdmin = (CString)pRes->GetCollect((_variant_t)((long)0)).bstrVal;
    CString strPassword = (CString)pRes->GetCollect((_variant_t)((long)1)).bstrVal;
    int nPopedom = (int)pRes->GetCollect((_variant_t)((long)2)).intVal;
    
    m_mapUserPassword.insert( CUserPasswordMap::value_type(strAdmin,strPassword));
    m_mapUserPopedom.insert( CUserPopedomMap::value_type(strAdmin,nPopedom));
    
    pRes->MoveNext();    
    }
    pRes->Close();
    pRes.Release();
    }

    其中,ADOConnection.h 文件为

    #pragma once
    
    class ADOConnection
    {
    public:
    	ADOConnection(void);
    	virtual ~ADOConnection(void);
    
    public:
        BOOL Open(const CString& strCource) ;
    	void Close();
    	BOOL IsOpen() ;
    	BOOL ExecuteNoSelectSQL(const CString& strSQL);
    	_RecordsetPtr ExecuteSelectSQL(const CString& strSQL) ;	
    	_ConnectionPtr* GetADOSmartpConnection();
    
    private:
    	_ConnectionPtr* m_pConn;
    	_ConnectionPtr& m_pConnection;
    };
    

    ADOConnection.cpp 文件为 

    #include "StdAfx.h"
    #include "adoconnection.h"
    
    ADOConnection::ADOConnection(void):m_pConnection(*m_pConn),m_pConn(new _ConnectionPtr)
    {
    }
    
    ADOConnection::~ADOConnection(void)
    {
        this->Close();
        if ( m_pConn != NULL)
        {
            delete m_pConn;
            m_pConn = NULL;
        }
    }
    
    BOOL ADOConnection::Open( const CString& strCource )
    {
        HRESULT hr = 0;
        try
        {
            hr = CoInitialize(NULL); 
            hr = this->m_pConnection.CreateInstance("ADODB.Connection");
            if (SUCCEEDED(hr))
            {
                // strCource = _T("driver={SQL Server};Server=(local);DATABASE=MessagePublish;UID=sa;PWD=123456") ; //SQL Server连接串
                // strCource = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source= MessagePublish.mbd") ; //Access连接串
    
                
                CString strConn = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=") + strCource + _T(";Jet OLEDB:Database Password=!@#$%^&*()_+;") ;       
    
                hr = m_pConnection->Open( _bstr_t(strConn),"","",adModeUnknown);  //SQL Server    
                if ( this->IsOpen())
                    return TRUE;
            }
        }
        catch (_com_error e)
        {
            return FALSE;
        }
        return FALSE;
    }
    
    void ADOConnection::Close()
    {
        try
        {
            if( m_pConnection != NULL )
            {
                if ( m_pConnection->State != adStateClosed  )
                {
                    m_pConnection->Close();
                }    
                CoUninitialize();
            }
            m_pConnection = NULL; 
    
        }
        catch (_com_error e)
        {
    
        }
    }
    
    BOOL ADOConnection::IsOpen()
    {
        if( m_pConnection == NULL || m_pConnection->State == adStateClosed )
        {
            return FALSE;
        }
        return TRUE;
    }
    
    BOOL ADOConnection::ExecuteNoSelectSQL( const CString& strSQL )
    {
        try
        {
            _variant_t RecordsAffected;
            m_pConnection->Execute(_bstr_t(strSQL),&RecordsAffected,adCmdText);
            ULONG iInfluence = (long)RecordsAffected;    
            return TRUE;    
        }
        catch (_com_error e)
        {
            CString str =  _T ( "执行SQL语句出错:" ) + strSQL ;
            //AfxMessageBox( str );
    
            return FALSE;    
    
        }    
    }
    
    _RecordsetPtr ADOConnection::ExecuteSelectSQL( const CString& strSQL )
    {
        try
        {    
            _RecordsetPtr m_pRecordset;
            m_pRecordset.CreateInstance(__uuidof(Recordset));
            m_pRecordset->Open(_bstr_t(strSQL)
                ,(IDispatch*)m_pConnection
                ,adOpenDynamic
                ,adLockOptimistic
                ,adCmdText);
    
            return m_pRecordset;
        }
        catch (_com_error e)
        {
    
        }
    
        return NULL;
    }
    
    _ConnectionPtr* ADOConnection::GetADOSmartpConnection()
    {
        return m_pConn;
    }

    要遍历数据库里面的数据:

    void CInfoStationDlg::GetAllSign()
     {
         CString strSQL =  _T("SELECT * FROM [Sign]") ;
         _RecordsetPtr  pRecordSet = theApp.m_adoConn.ExecuteSelectSQL( strSQL );//这里判断有没有成功打开数据库,如果成功的话,就返回一个对象;
         if (pRecordSet != NULL)
         {        
             while ( !pRecordSet->adoEOF )
             {
                 CString strID= (CString)pRecordSet->GetCollect((_variant_t)((long)0)).bstrVal ;
                 CString strIP= (CString)pRecordSet->GetCollect((_variant_t)((long)1)).bstrVal ;
                 CString strMemo= (CString)pRecordSet->GetCollect((_variant_t)((long)2)).bstrVal ;    
    
                 CSign* pSign = new CSign();
                 if ( pSign != NULL )
                 {
                     pSign->SetID( strID );
                     pSign->SetIP( strIP );
                     pSign->SetMemo( strMemo);
                     m_listSign.AddTail( pSign );
                 }
                 pRecordSet->MoveNext();
             }
         }
     }

    3增加数据

    void CInfoStationDlg::OnBnClickedAdd()
    {    
        CSign* pSign = new CSign();
        if ( pSign != NULL )
        {
            CDlgSign dlg( pSign , FALSE , this);
            if ( IDOK == dlg.DoModal())
            {    
                if ( theApp.m_adoConn.ExecuteNoSelectSQL( pSign->GetAddSQL() ) )//这里代表语句执行成功;
                {
                    m_listSign.AddTail( pSign );
                    FillSignList();
                    m_index = m_listCtrlSign.GetItemCount() - 1 ;
                    m_listCtrlSign.SetItemState( m_index , LVIS_SELECTED , LVIS_SELECTED );
                    m_listCtrlSign.EnsureVisible( m_index , FALSE );
                }
            }
            else
            {
                delete pSign;
                pSign = NULL;
            }
        }    
    }

    4.修改数据;

    POSITION pos = m_listCtrlSign.GetFirstSelectedItemPosition();
        if ( pos )
        {
            int nIndex = m_listCtrlSign.GetNextSelectedItem(pos);
            m_index = nIndex ;
            CSign* pSign = (CSign*)m_listCtrlSign.GetItemData(nIndex);
            if ( pSign != NULL )
            {
                CString strOldID = pSign->GetID();
                CDlgSign dlg( pSign , TRUE , this);
                if ( IDOK == dlg.DoModal())
                {    
                    if ( theApp.m_adoConn.ExecuteNoSelectSQL( pSign->GetModifySQL( strOldID) ) )
                    {
                        FillSignList();
                    }
                }
                m_listCtrlSign.SetItemState( m_index , LVIS_SELECTED , LVIS_SELECTED );
                BOOL SaveProgram( const CString &strPath );
            }
        }
        else
        {
    
            if ( m_listCtrlSign.SetItemState( m_listCtrlSign.GetItemCount() - 1 , LVIS_SELECTED , LVIS_SELECTED ))
            {
                OnBnClickedEdit();
            }
            else
                return ;
        }

    5.删除数据

     
  • 相关阅读:
    C语言中返回字符串函数的四种实现方法
    (转)大整数除法jva.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result异常的解决方法
    @Transactional使用try->catch捕获异常并回滚方法
    Golang1.13.x 解决go get 无法下载问题
    Zookeeper:Unable to read additional data from client sessionid 0x00, likely client has closed socket
    解决Linux系统下面javamelody图片中文乱码问题
    mybatis查询mysql的datetime类型数据时间差了14小时
    以太坊多重钱包离线签名
    Solidity智能合约如何判断地址为0或空
    Solidity开发注意
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3122534.html
Copyright © 2011-2022 走看看