VC++中ADO的操作

 VC++中ADO的操作:

1、先在stdAfx.h中添加支持库
// 加入ADO支持库
#import "c:/program files/common files/system/ado/msado15.dll" /
 no_namespace /
 rename ("EOF", "adoEOF")      


2、连接数据库
*App.h上
 // 定义ADO连接变量指针
 _ConnectionPtr m_pConnection;

在*App.CPP   InitInstance()中加入
 // 初始化COM,创建ADO连接等操作
 AfxOleInit();
 m_pConnection.CreateInstance(__uuidof(Connection));

 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。jingzhou xu
 try                
 { 
  // 打开本地Access库Demo.mdb
  m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=文件名.mdb","","",adModeUnknown);
  
 }
 catch(_com_error e)
 {
  AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
  return FALSE;
 }
 pDoc->OpenDateBase();// 调用操作数据库的函数


3、在需要的地方对数据库进行操作
// 定义ADO连接、命令、记录集变量指针
_ConnectionPtr m_pConnection;
_CommandPtr m_pCommand;
_RecordsetPtr m_pRecordset;


// 使用ADO创建数据库记录集
 m_pRecordset.CreateInstance(__uuidof(Recordset));
 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。jingzhou xu
 try
 {//得到数据库纪录指针,使指针指向表
  m_pRecordset->Open("SELECT * FROM 表名",       // 查询DemoTable表中所有字段
   theApp.m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
   adOpenDynamic,
   adLockOptimistic,
   adCmdText);
 }
 catch(_com_error *e)
 {
  AfxMessageBox(e->ErrorMessage());
 }


//读数据库的操作
 _variant_t var;
 CString strName,strAge;
 // 清空列表框
 m_AccessList.ResetContent();
 strName=strAge="";
 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。jingzhou xu
 try
 {
  // 先将指针移向第一条记录,然后就可以相对第一条记录来随意移动记录指针
  if(!m_pRecordset->BOF)
   m_pRecordset->MoveFirst();
  else
  {
   AfxMessageBox("表内数据为空");
   return;
  }

  // 读入库中各字段并加入列表框中
  while(!m_pRecordset->adoEOF)
  {
   var = m_pRecordset->GetCollect("Name");//查找字段名为Naem的列
   if(var.vt != VT_NULL)
    strName = (LPCSTR)_bstr_t/*字符串*/(var);//以字符串形式复值给         //strName
   var = m_pRecordset->GetCollect("Age");//查找字段名为Age的列
   if(var.vt != VT_NULL)
    strAge = (LPCSTR)_bstr_t(var);

   m_AccessList.AddString( strName + " --> "+strAge );

   m_pRecordset->MoveNext();//将记录指针指向下一行
  }

  // 默认列表指向第一项,同时移动记录指针并显示
  m_AccessList.SetCurSel(0);
  OnSelchangeListaccess();
 }
 catch(_com_error *e)
 {
  AfxMessageBox(e->ErrorMessage());
 }


//删除数据库记录
 if(m_AccessList.GetCount() == 0)
  return;
 else if(m_AccessList.GetCurSel() < 0 || m_AccessList.GetCurSel() > m_AccessList.GetCount())
  m_AccessList.SetCurSel(0);

 try
 {
  // 删除当前行记录
  m_pRecordset->Delete(adAffectCurrent);
  m_pRecordset->Update();

  // 删除列表中当前值
  int nCurSel = m_AccessList.GetCurSel();
  m_AccessList.DeleteString(nCurSel);
  if(nCurSel == 0 && (m_AccessList.GetCount() != 0))
   m_AccessList.SetCurSel(nCurSel);
  else if(m_AccessList.GetCount() != 0)
   m_AccessList.SetCurSel(nCurSel-1);
  
  // 移动记录指针到新的位置
  OnSelchangeListaccess();
 }
 catch(_com_error *e)
 {
  AfxMessageBox(e->ErrorMessage());
 }


//写数据库的操作
 UpdateData();//更新客户信息
 if(m_Name == "" || m_Age == "")
 {
  AfxMessageBox("姓名和年龄信息不能为空!");
  return;
 }
 // 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
 // 因为它有时会经常出现一些想不到的错误。
 try
 {
  // 写入各字段值
  m_pRecordset->AddNew();//开辟新记录
  m_pRecordset->PutCollect("Name", _variant_t(m_Name));//修改字段信息
  m_pRecordset->PutCollect("Age", atol(m_Age));//修改字段信息
  m_pRecordset->Update();//更新内容

  AfxMessageBox("插入成功!");

  // 更新显示其库内容
  int nCurSel = m_AccessList.GetCurSel();
  OnReadAccess();
  m_AccessList.SetCurSel(nCurSel);
  // 移动记录指针到新的位置
  OnSelchangeListaccess();
 }
 catch(_com_error *e)
 {
  AfxMessageBox(e->ErrorMessage());
 }


// 关闭记录集
 m_pRecordset->Close();
 m_pRecordset = NULL;
//修改字段信息
 m_pRecordset->PutCollect("Name", _variant_t(m_Name));//修改字段信息
 m_pRecordset->PutCollect("Age", atol(m_Age));//修改字段信息

4、断开数据库连接
 // 关闭ADO连接状态
 if(m_pConnection->State)
  m_pConnection->Close();
 m_pConnection= NULL;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值