首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Dotnet频道
中国IT教育
Google
首页 ASP.NET  C#  XML/WebService ADO.NET VC.NET VB.NET .NET 资讯动态 专题 RSS订阅 讨论 下载
您现在的位置: 中国IT实验室 >> Dotnet >> VC.NET >> 正文

Visual C++中的ODBC编程实例



  2.增加记录

  增加记录使用AddNew()函数,要求数据库必须是以允许增加的方式打开:

  m_pSet->AddNew(); //在表的末尾增加新记录
  m_pSet->SetFieldNull(&(m_pSet->m_type), FALSE);
  m_pSet->m_type=″电动机″;
  ……
  //输入新的字段值
  m_pSet->Update();
  //将新记录存入数据库
  m_pSet->Requery();
  //重建记录集

  3.删除记录

  可以直接使用Delete()函数来删除记录,并且在调用Delete()函数之后不需调用Update()函数:

  m_pSet->Delete();
  if (!m_pSet->IsEOF())
  m_pSet->MoveNext();
  else
  m_pSet->MoveLast();

  4.修改记录

  修改记录使用Edit()函数:

  m_pSet->Edit();
  //修改当前记录
  m_pSet->m_type=″发电机″;
  //修改当前记录字段值
   ……
  m_pSet->Update(); //将修改结果存入数据库
  m_pSet->Requery();

  5.撤消操作

  如果用户选择了增加或者修改记录后希望放弃当前操作,可以在调用Update()函数之前调用:

  CRecordSet::Move(AFX_MOVE_REFRESH)来撤消增加或修改模式,并恢复在增加或修改模式之前的当前记录。其中,参数AFX_MOVE_REFRESH的值为零。

  6.数据库连接的复用

  在CRecordSet类中定义了一个成员变量m_pDatabase:

  CDatabase* m_pDatabase;

  它是指向对象数据库类的指针。如果在CRecordSet类对象调用Open()函数之前,将一个已经打开的CDatabase类对象指针传给m_pDatabase,就能共享相同的CDatabase类对象。如:

  CDatabase m_db;
  CRecordSet m_set1,m_set2;
  m_db.Open(_T(″Super_ES″)); //建立ODBC连接
  m_set1.m_pDatabase=&m_db;
  //m_set1复用m_db对象
  m_set2.m_pDatabse=&m_db;
  // m_set2复用m_db对象

  7.SQL语句的直接执行

  虽然我们可以通过CRecordSet类完成大多数的查询操作,而且在CRecordSet::Open()函数中也可以提供SQL语句,但是有时候我们还是希望进行一些其他操作,例如建立新表、删除表、建立新的字段等,这时就需要使用CDatabase类直接执行SQL语句的机制。通过调用CDatabase::ExecuteSQL()函数来完成SQL语句的直接执行:

  BOOL CDB::ExecuteSQLAndReportFailure(const CString& strSQL)
  {TRY
  {m_pdb->ExecuteSQL(strSQL);
  //直接执行SQL语句}
  CATCH (CDBException,e)
  {CString strMsg;
  strMsg.LoadString(IDS_EXECUTE_SQL_FAILED);
  strMsg+=strSQL;
  return FALSE;}
  END_CATCH
  return TRUE;}

  应当指出的是,由于不同的DBMS提供的数据操作语句不尽相同,直接执行SQL语句可能会破坏软件的DBMS无关性,因此在应用中应当慎用此类操作。

  8.动态连接表

  表的动态连接可以利用在调用CRecordSet::Open()函数时指定SQL语句来实现。同一个记录集对象只能访问具有相同结构的表,否则查询结果将无法与变量相对应。

  void CDB::ChangeTable()
  {
  if (m_pSet->IsOpen()) m_pSet->Close();
  switch (m_id)
  {
  case 0:
  m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,
  ″SELECT * FROM SLOT0″);
  //连接表SLOT0
  m_id=1;
  break;
  case 1:
  m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,
  ″SELECT * FROM SLOT1″); //连接表SLOT1
  m_id=0;
  break; }}

  9.动态连接数据库

  可以通过赋与CRecordSet类对象参数m_pDatabase来连接不同数据库的CDatabase对象指针,从而实现动态连接数据库。

  void CDB::ChangeConnect()
  {CDatabase* pdb=m_pSet->m_pDatabase;
  pdb->Close();
  switch (m_id)
  {
  case 0:
  if (!pdb->Open(_T(″Super_ES″)))
  //连接数据源Super_ES
  {
  AfxMessageBox(″数据源Super_ES打开失败″,″请检查相应的ODBC连接″, MB_OK|MB_ICONWARNING);
  exit(0);
  }
  m_id=1;
  break;
  case 1:
  if (!pdb->Open(_T(″Motor″)))
  //连接数据源Motor
  {
  AfxMessageBox(″数据源Motor打开失败″,″请检查相应的ODBC连接″, MB_OK|MB_ICONWARNING);
  exit(0);
  }
  m_id=0;
  break; }}

  总结:Visual C++中的ODBC类库可以帮助程序员完成绝大多数的数据库操作。利用ODBC技术使得程序员从具体的DBMS中解脱出来,从而可以减少软件开发的工作量,缩短开发周期,并提高效率和软件的可靠性。

上一页  [1] [2] 

【责编:Youping】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·WEB程序开发--ASP.NET和PHP、JSP究竟学哪个?
 ·五步带你入门XML
 ·关于Java框架技术专题
 ·XML全攻略技术专题
 ·JAVA开源技术介绍专题
 ·Java嵌入式开发之J2ME技术专题
 ·超前体验 Oracle 11g的5个新特性…
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题…
 ·展现C#世界 C#程序设计专题…
 今日更新
 社区讨论
 博客论点
 频道精选
 Dotnet频道相关导航