Visual C++上ODBC编程实例(2)

分类: VC.NET   出处:iocblog整理  更新时间:2009-06-07   添加到收藏  


  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]


Tag: ODBC



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。