ADO大总结

内容比较乱,作为草稿,对现有的ado数据库操作函数方法进行汇总。

小函数 m_pRecordset->RecordCount//取得记录数量

全局变量 #import "msado15.dll" no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF") _ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset; 1.连接数据源OnInitADOConn(); //初始化OLE/COM库环境 ::CoInitialize(NULL); try{ //创建Connection对象 m_pCOnnection.CreateInstance("ADODB.Connection"); //设置连接字符串 _bstr_t strConnect="uid=;pwd=;DRIVER={Microsoft Access Driver(*mdb)};DBQ=database.mdb;"; m_pConnection->Open(strConnect,"","",adModeUnknown); } catch(_com_error e){ AfxMessageBox(e.Description); }

2.关闭数据库连接 if(m_pRecordset!=NULL)  m_pRecordset->Close(); m_pConnection->Close(); ::CoUninitialize();//释放环境

3.获取记录集数据 传入一个_bstr_t bstrSQL (1)Open方法 try{ if(m_pConnection==NULL)//如果为空,重新连接  OnInitADOConn(); m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); }//adCmdText:bstrSQL是文本.adCmdTable:bstrSQL是表名 (2)Execute方法 _RecordsetPtr Execute(_bstr_t CommandTex,VARIANT* RecordsAffeced,long Options) CommandText是SQL命令,RecordsAffeced是操作后影响的行数,Options是CommandText中内容的类型 Options:adCmdText文本,adCmdTable表名,adCmdStoredProc存储过程,adCmdUnknown类型未知 >>_variant_t RecordsAffected; try{ if(m_pConnection==NULL)//是否连接数据库  OnInitADOConn();//又重新连接  m_pConnection->Execute(bstrSQL,NULL,adCmdText); } catch(_com_error e) { e.Description(); return false; }

4.遍历记录集 MoveNext,MoveFirst,MoveLast,MovePrevious; (char *)(_bstr_t)m_pRecordset->GetCollect("姓名");//方法一 m_sName=(CStringW)(m_pAdoRecordset->Fields->Item[_variant_t("NAME")]->Value);//方法二 while(m_pRecordset->adoEOF==0) {m_pRecordset->MoveNext();} 5.添加数据 try{ m_pRecordset->AddNew();//开始添加 m_pRecordset->PutCollect("列名",(_bstr_t)m_id); m_pRecordset-->Update();//更新字段 } 6.修改数据 try{ m_pRecordset->Move((long)pos,vtMissing); m_pRecordset->PutCollect("姓名",(_bstr_t)m_name); m_pRecordset-->Update(); } 7.删除数据 m_pRecordset->Move((long)pos,vtMissing); m_pAdoRecordset->Delete(adAffectCurrent); m_pRecordset-->Update();     try     {        //假设删除第10条记录        m_pRecordset->MoveFirst();//注意一定要移到第一个        m_pRecordset->Move(9);        m_pRecordset->Delete(adAffectCurrent);        //参数adAffectCurrent为删除当前记录        m_pRecordset->Update();     }     catch(_com_error *e)     {        AfxMessageBox(e->ErrorMessage());     } 8.保存图片( 参考下一篇博客)  char *m_pBuffer;//文件数据  DWORD m_filelen;//文件长度  VARIANT varblob;  SAFEARRAY *psa;  SAFEARRAYBOUND rgsabound[1];  rgsabound[0].lLbound=0;  rgsabound[0].cElements=m_filelen;  psa=SafeArrayCreate(VT_UI1,1,rgsabound);  for(long i=0;i<(long)m_filelen;i++)  {   SafeArrayPutElement(psa,&i,m_pBuffer++);  }  //记录值  varblob.vt=VT_ARRAY|VT_UI1;  varblob.parray=psa;  m_pRecordset->GetFields()->GetItem("PHOTO_DATA")->AppendChunk(varblob);  m_pRecordset->Update(); 读取数据库语音数据 long lDataSize=m_pRecordset->GetFields()->GetItem("voice")->ActualSize;//取得数据区域大小 char *m_pBuffer; if(lDataSize>0) { //读取数据到varBLOB中 _variant_t varBLOB; varBLOB=m_pRecordse->GetFields()->GetItem("voice")->GetChunk(lDataSize); if(varBLOB.vt==(VT_ARRAY|VT_UI1))  {  if(m_pBuffer=new char[lDataSize+1])  {  char *pBuf=0;  SafeArrayAccessData(varBLOB.parray,(void**)&pBuf);  memcpy(m_pBuffer,pBuf,lDataSize);//赋值数据到m_pBuffer  SafeArrayUnaccessData(varBLOB.parray);  }  } }

其他连接方法 打开  m_pAdoRecordset=NULL;  m_pAdoConnect=NULL;//初始化  iCurrentOne=-1;  //*******************************************  if(FAILED(::CoInitialize(NULL)))//这句话很重要!  {   ::AfxMessageBox(_T("fail to CInitialize(NULL)"));   PostQuitMessage(-8);//?  }  HRESULT hr=m_pAdoConnect.CreateInstance(__uuidof(Connection));  if(FAILED(hr)){   ::AfxMessageBox(_T("fail to create instance for _ConnectPtr"));   PostQuitMessage(-8);  }  bstr_t strConnect="DSN=FRDB;\        DBQ=H:\\FRDB.accdb;\        DriverID=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;";  try{   m_pAdoConnect->Open(strConnect,"clc","",NULL);  }  catch(_com_error &e)  {   ::AfxMessageBox(e.Description());   PostQuitMessage(-8);  }  m_pAdoRecordset=NULL;  hr=m_pAdoRecordset.CreateInstance(__uuidof(Recordset));  if(FAILED(hr)){   ::AfxMessageBox(_T("fail to create instance for _RecordsetPtr"));   PostQuitMessage(-8);  }  m_pAdoRecordset->Open(_variant_t("Person"),_variant_t((IDispatch*)

m_pAdoConnect,true),adOpenKeyset,adLockOptimistic,adCmdTable); 关闭  if(m_pAdoRecordset){ if(m_pAdoRecordset->State==adStateOpen){    m_pAdoRecordset->Close(); }}  if(m_pAdoConnect)  { if(m_pAdoConnect->State==adStateOpen){    m_pAdoConnect->Close();}}   ::CoUninitialize();//关闭线程下的数据库 添加数据 m_pAdoRecordset->Fields->GetItem(_variant_t("NAME"))->Value=_variant_t(m_sName); 载入数据 m_sName=(CStringW)(m_pAdoRecordset->Fields->Item[_variant_t("NAME")]->Value);

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cloudskyme

jbpm5.1介绍(7)

Junit测试评估流程 评估流程的界面如下: ? 这个示例里边用到了Script Task,Service Task和User Task Log执行记录日志的...

38011
来自专栏张善友的专栏

Mono 3.2 上跑NUnit测试

NUnit是一款堪与JUnit齐名的开源的回归测试框架,供.net开发人员做单元测试之用,可以从www.nunit.org网站上免费获得,最新版本是2.5。Mo...

1707
来自专栏.NET开发者社区

一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)

在本系列第一篇《一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)》中,我为大家介绍...

22310
来自专栏哲学驱动设计

Rafy 框架 - 执行SQL或存储过程

有时候,开发者不想通过实体来操作数据库,而是希望通过 SQL 语句或存储过程来直接访问数据库。Rafy 也提供了一组 API 来方便实现这类需求。 IDbAcc...

18010
来自专栏大内老A

SQLXML初体验:用XML代替T-SQL来操作数据库

随着Internet的飞速发展,W3C成员意识到必须找到一种办法将数据和Web的表现方式分离出来,于是XML诞生了。当今的XML已经成为IT领域各个数据(特别是...

3186
来自专栏技术博客

一步一步学Linq to sql(二):DataContext与实体

 DataContext类型(数据上下文)是System.Data.Linq命名空间下的重要类型,用于把查询句法翻译成SQL语句,以及把数据从数据库返回给调用方...

652
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(89)-EF执行SQL语句与存储过程

这一节,我们来看看EF如何执行SQL语句与读取存储过程的数据,可能有一部分人,还不知道EF如何执行存储过程与原生SQL语句! 我们什么时候要直接使用原生的S...

3656
来自专栏程序员的酒和故事

Go实战--golang中使用RethinkDB(gorethink/gorethink.v3)

生命不止,继续go go go !!! 关于golang中操作数据库,曾经介绍了不少: Go实战–go语言操作sqlite数据库(The way to go) ...

3958
来自专栏程序员的SOD蜜

PDF.NET数据开发框架实体类操作实例(for PostgreSQL,并且解决自增问题) PDF.NET数据开发框架实体类操作实例(MySQL)

本篇是 PDF.NET数据开发框架实体类操作实例(MySQL) 的姊妹篇,两者使用了同一个测试程序,不同的只是使用的类库和数据库不同,下面说说具体的使用过程。 ...

2486
来自专栏hbbliyong

SQLite事务 SQLite插入多条语句为什么这么慢?.net (C#)

今天有个朋友测试 SQLite,然后得出的结论是: SQLite 效率太低,批量插入1000条记录,居然耗时 2 分钟! 下面是他发给我的测试代码。我晕~~~~...

3727

扫描关注云+社区