MFC学习(一)——ADO数据库编程

这几篇是是在MFC框架下做保险项目的学习心得,只学了两周,但是还是学了很多知识。 下面介绍一下用ADO来进行数据库的各种操作。 1、数据库连接和打开 这次项目用的是SQL Server数据库,ADO连接数据遇到最重要的问题就是找到连接字符串,经过亲身经历各种尝试,在网上发现了一种无bug的方法,就是通过新建ado.udl文件,然后打开填写相应的数据库后用记事本打开即可得到连接字符串。下面是我封装的一个打开数据库的方法:

 1 BOOL CDateOperator::OpenDateBase()
 2 {
 3 
 4     if(NULL ==    m_pConnection){
 5         AfxMessageBox(L"Create Instance failed!");
 6         return FALSE;
 7     }
 8     if(m_pConnection){
 9         
10         
11         try
12         {
13             
14             const _bstr_t strSRC= "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=mydb;Data Source=LI5CH\\SQLEXPRESS";
15 
16             HRESULT hr = m_pConnection->Open(strSRC,L"",L"",-1);
17         }
18         catch(_com_error &e)
19         {
20             CString errormsg;
21             errormsg.Format(L"关闭连接——操作错误!\r\n错误信息:%s",e.ErrorMessage());
22             AfxMessageBox(errormsg);
23             
24         }
25 
26     }
27     return TRUE;     
28 
29 }

2、ADO如何执行sql语句

BOOL CDateOperator::ExcuteSQL(CString strSQL){
    if(NULL ==    m_pConnection) return FALSE;
    try
        {
        
            HRESULT hr = m_pConnection->Execute(_bstr_t(strSQL),NULL,-1);
        }
        catch(_com_error &e)
        {
            return FALSE;
        }
        return TRUE;
}

3、ADO如何插入记录

BOOL CDateOperator::Insert_db(DEMO objuser)
{
    if(NULL == m_pConnection) return FALSE;
    _RecordsetPtr m_pRecordset;
    HRESULT hr = m_pRecordset.CreateInstance(L"ADODB.Recordset");
    if(FAILED(hr)) return FALSE;
    
    CString strSQL = L"SELECT User_ID, User_Name FROM fate";
    hr = m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
    if(FAILED(hr)){
        m_pRecordset.Release();
        return FALSE;
    }
    try
    {
        m_pRecordset->AddNew();
    }
    catch(_com_error &e)
    {
        m_pRecordset->Close();
        m_pRecordset.Release();
        return FALSE;
    }
//    byte byData[10000];
    try
    {
        m_pRecordset->PutCollect("User_ID",_variant_t(objuser.User_ID));
        m_pRecordset->PutCollect("User_Name",_variant_t(objuser.User_Name));
    }
    catch(_com_error &e)
    {
        m_pRecordset->Close();
        m_pRecordset.Release();
        return FALSE;
    }
    m_pRecordset->Update();
    m_pRecordset->Close();
    m_pRecordset.Release();
    return TRUE; 
}

4、ADO如何查询数据

BOOL CDateOperator::Select_db(vector<DEMO>& vecObjUser)
{
    if(NULL == m_pConnection) return FALSE;
    _RecordsetPtr m_pRecordset;
    HRESULT hr = m_pRecordset.CreateInstance(L"ADODB.Recordset");
    if(FAILED(hr)) return FALSE;
    vecObjUser.clear();
    CString strSQL = L"SELECT User_ID, User_Name FROM fate";
    hr = m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
    if(FAILED(hr)){
        m_pRecordset.Release();
        return FALSE;
    }
    VARIANT_BOOL bRet = m_pRecordset->GetadoEOF();
    while(!bRet){
        _variant_t varUserID = m_pRecordset->GetCollect(L"User_ID");
        _variant_t varUserName = m_pRecordset->GetCollect(L"User_Name");
        DEMO objUser;
        objUser.User_ID=varUserID.intVal;

        _tcscpy(objUser.User_Name,(TCHAR*)(_bstr_t)varUserName);
        vecObjUser.push_back(objUser);
        m_pRecordset->MoveNext();
        bRet = m_pRecordset->GetadoEOF();

    }
    m_pRecordset->Close();
    m_pRecordset.Release();
    return TRUE; 
    
}

5、ADO如何更新数据

BOOL CDateOperator::update_db(DEMO objuser)
{
    if(NULL == m_pConnection) return FALSE;
    _RecordsetPtr m_pRecordset;
    HRESULT hr = m_pRecordset.CreateInstance(L"ADODB.Recordset");
    if(FAILED(hr)) return FALSE;
    CString strSQL;
    strSQL.Format(L"SELECT User_ID, User_Name FROM fate WHERE User_ID=%d", objuser.User_ID);
    hr = m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
    if(FAILED(hr)){
        m_pRecordset.Release();
        return FALSE;
    }

//    byte byData[10000];
    try
    {
        m_pRecordset->PutCollect("User_Name",_variant_t(objuser.User_Name));
    }
    catch(_com_error &e)
    {
        m_pRecordset->Close();
        m_pRecordset.Release();
        return FALSE;
    }
    m_pRecordset->Update();
    m_pRecordset->Close();
    m_pRecordset.Release();
    return TRUE; 
}

6、下面贴一下构造和析构函数

CDateOperator::CDateOperator(void)
{
    try
    {
        HRESULT hr =  m_pConnection.CreateInstance("ADODB.Connection");
        if(FAILED(hr))
        {
            AfxMessageBox(L"Create Instance failed!");
            m_pConnection = NULL;
        }
    }

    catch(_com_error &e)
    {
    }
}


CDateOperator::~CDateOperator(void)
{
    if(m_pConnection)
    {
        try
        {
            HRESULT hr =  m_pConnection->Close();
            
        }

        catch(_com_error &e)
        {
        }
    }
    m_pConnection.Release();
    m_pConnection = NULL;
    
}

 

转载于:https://www.cnblogs.com/li5ch/p/4527615.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值