MFC连接SQLServer数据库及操作数据库信息

个人博客地址 www.tmbcode.com

MFC连接SQLServer数据库及操作数据库信息

一、测试环境

         操作系统:WindowsXP

         数据库:SQLServer2005

IDE:VC++6.0

 

二、初始化ADO

         在.h文件中添加:

         _ConnectionPtrm_pConnection;

         _RecordsetPtrm_pRst;

 

         在.cpp中添加函数:

         BOOLXXXApp::InitADO()

{

         CoInitialize(NULL); 

         HRESULThrpC,hrpR;

         hrpC=m_pConnection.CreateInstance(__uuidof(Connection));

         hrpR=m_pRst.CreateInstance(__uuidof(Recordset));

         if(SUCCEEDED(hrpC)&& SUCCEEDED(hrpR))

                   returnTRUE;

         returnFALSE;

}

 

三、连接数据库的函数

         boolXXXApp::ConnectMDBDatabase()

{       

         CStringtemp;

         _variant_tvar;

         CStringsql;

         sql.Format("driver={SQLServer};Server=TEST;DATABASE=TEST;UID=sa;PWD=123456");

         try

         {

                            if(((XXXApp*)AfxGetApp())->m_pConnection->State)

                            ((XXXApp*)AfxGetApp())->m_pConnection->Close();

                                               ((XXXApp*)AfxGetApp())->m_pConnection->ConnectionTimeout=15;

((XXXApp *)AfxGetApp())->m_pConnection->Open((char*)(LPCTSTR)sql,"","",adModeUnknown);

         }

                   catch(_com_errore)

         {

                   returnFALSE;

         }

 

         returnTRUE;

}

四、建立连接(在InitInstance()中添加)

         //初始化ADO

         if(!((XXXApp*)AfxGetApp())->InitADO())

         {

                   returnFALSE;

         }

 

         //连接生产数据库

         if(!this->ConnectMDBDatabase())

         {

                   AfxMessageBox("连接生产数据库失败",MB_OK,0);

                   returnFALSE;

         }

 

五、操作数据库信息

 

BOOL XXX::GetOrderList()//查询和插入

{

         CStringtemp;

         _variant_tvar;

         CStringsql;

        

         try

         {

                   sql.Format("select*  from Table where Name='test' andEnable = 1");

                   if(((XXXApp*)AfxGetApp())->m_pRst->State)

                            ((XXXApp*)AfxGetApp())->m_pRst->Close();

((XXXApp*)AfxGetApp())->m_pRst=((XXXApp *)AfxGetApp())->m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);                  

                   while(!((XXXApp*)AfxGetApp())->m_pRst->adoEOF)

                   {                          

                            var= ((XXXApp *)AfxGetApp())->m_pRst->GetCollect("Class");

                            temp=VariantToCString(var);

                            this->m_ctrClass.AddString(temp);

                            var= ((XXXApp *)AfxGetApp())->m_pRst->GetCollect("Age");

                            this->age=var.intval();

                            ((XXXApp*)AfxGetApp())->m_pRst->MoveNext();

                   }

                   if(((XXXApp*)AfxGetApp())->m_pRst->State)

                            ((XXXApp*)AfxGetApp())->m_pRst->Close();

         }

         catch(_com_errore)

         {

                   returnFALSE;

         }

 

         sql.Format("INSERTINTO Student (Name,Adress) VALUES ('%s','%s')", \

                                     this->name,this->adress);

                           

                            try

                            {

                                     if(((XXXApp*)AfxGetApp())->m_pRst->State)

                                               ((XXXApp *)AfxGetApp())->m_pRst->Close();

                                     ((XXXApp*)AfxGetApp())->m_pConnection->Execute((_bstr_t)sql,NULL,adCmdText);

                                     if(((XXXApp*)AfxGetApp())->m_pRst->State)

                                               ((XXXApp*)AfxGetApp())->m_pRst->Close();

                            }

                            catch(_com_errore)

                            {

                                     MessageBox("录入Student表失败","提示",MB_ICONHAND);

                                     returnFALSE;

                            }

 

         returnTRUE;

}

 

         Update和Delete以此类推,这里就不做详细介绍了。

         此文章只是个人在实际项目中所总结的一点小小经验,代码不是非常的严谨,觉得有帮助的可以参考一下,觉得有问题的可以给我留言,便于我做出改善,大家相互学习。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明亮Lucky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值