精品理论电影在线_日韩视频一区二区_一本色道精品久久一区二区三区_香蕉综合视频

C技巧:VC訪問數據庫技術的方法實例

發布時間:2011-08-29 共1頁

  最常用的數據庫訪問技術有如下幾種
  1.ODBC——開放數據庫互聯
  ODBC為使用不同的關系數據庫提供了一個統一的程序設計接口。在安裝不同的數據庫后,需要創建ODBC數據源,
  2.DAO——數據訪問對象
  3.RDO——遠程數據對象
  4.OLE DB——對象連接與嵌入數據庫
  5.ADO——ActiveX數據對象
  這里我說明我使用的兩種方法:ODBC和ADO。
  1.ODBC
  在安裝數據庫首先要創建ODBC數據源,使用CDatabase和CRecordset兩個MFC的類與數據庫建立連接,訪問數據庫。
  1.1條件
  包含頭文件:#include <afxdb.h>
  聲明成員變量:CDatabase m_dbPostGre;
  1.2連接數據庫
  int nRetVal;
  nRetVal = m_dbPostGre.OpenEx( _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" ),
  CDatabase::openReadOnly | CDatabase::noOdbcDialog );
  if ( nRetVal )
  {
  AfxMessageBox( _T( "連接數據庫成功!" ) );
  }
  1.3訪問數據
  CRecordset recordset( &m_dbPostGre );
  CString strSQL = _T( "select * from product" );
  recordset.Open( CRecordset::forwardOnly, strSQL, CRecordset::readOnly );
  CDBVariant var;
  while ( !recordset.IsEOF() )
  {
  TAG_PRODUCTINFO tagProductInfo;
  // ID
  recordset.GetFieldValue( _T( "ID" ), var );
  tagProductInfo.nProductID = var.m_iVal;
  // Name
  recordset.GetFieldValue( _T( "Name" ), tagProductInfo.strProductName );
  m_vecProductInfo.push_back( tagProductInfo );
  recordset.MoveNext();
  }
  recordset.Close();
  2.ADO技術
  ActiveX Data Object, ActiveX數據對象。
  ADO建立在OLE DB之上,采用ADO技術訪問數據庫的話,實際的調用過程是:ADO客戶程序通過ADO再訪問OLE DB提供的程序,這樣訪問速度就要慢一些。
  如果某個關系型數據庫沒有OLE DB的提供程序,那么可以利用ODBC的OLE DB提供程序去訪問ODBC,然后利用ODBC再去訪問支持ODBC的數據庫。
  2.1條件
  l 頭文件和動態庫的加載
  #include <comdef.h>
  #include <atlbase.h>
  #pragma warning(disable:4146)
  #import "C:\Program Files\Common Files\System\ado\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
  #pragma warning(default:4146)
  using namespace ADODB;
  l COM組件的加載
  if ( CoInitialize( NULL ) != 0 )
  {
  AfxMessageBox( _T( "初始化Com庫失敗!" ) );
  return FALSE;
  }
  l 變量的聲明
  _ConnectionPtr m_pConnection;
  2.2連接數據庫
  m_pConnection.CreateInstance( __uuidof(Connection) );
  m_pConnection->ConnectionString = _T( "DSN=PostgreSQL30W;UID=PostGre;PWD=PostGre" );
  HRESULT hr = m_pConnection->Open( _T(""), _T(""), _T(""), adConnectUnspecified );
  if ( SUCCEEDED( hr ) )
  {
  AfxMessageBox( _T( "連接數據庫成功!" ) );
  }
  2.3訪問數據庫
  _CommandPtr pCommand(__uuidof(Command));
  _RecordsetPtr pRecordset( __uuidof(Recordset) );
  CString strSQL = _T( "select * from \"pg_getProductInfo\"()" );
  try
  {
  pCommand->ActiveConnection=m_pConnection;
  pCommand->CommandText=_bstr_t(strSQL);
  pRecordset=pCommand->Execute(NULL,NULL,adCmdText);
  }
  catch (_com_error & e)
  {
  AfxMessageBox(e.Description());
  return ;
  }
  _variant_t var;
  int nRecordNum = pRecordset->GetRecordCount();
  while( !pRecordset->GetadoEOF() )
  {
  TAG_PRODUCTINFO tagProductInfo;
  // ID
  var = pRecordset->GetCollect( _T( "ID" ) );
  tagProductInfo.nProductID= var.intVal;
  // Name
  var = pRecordset->GetCollect( _T( "Name" ) );
  tagProductInfo.strProductName = (char*)_bstr_t(var);
  m_vecProductInfo.push_back( tagProductInfo );
  pRecordset->MoveNext();
  }
  pRecordset->Close();
  pRecordset.Release();
  總結:
  現在DAO和RDO這兩種技術已經很少使用了,OLE DB和ADO這兩種是比較新的技術,OLE DB的功能非常強,但是他對自動化的支持不是很好。為了更好地支持自動化,微軟在OLE DB的基礎上開發了ADO,便于像VBScript這樣的腳本語言,以及VB,Delphi這樣的語言都可以很方便的使用ADO去訪問數據庫。
  上面兩種技術對于不同的關系數據庫,使用方法都是一樣的,不同的就是數據源,名稱,密碼以及SQL語句的調用方式。
  舉個例子:以調用存儲過程為例
  SQLServer2000的調用方法是”{CALL sp_addMember( ’%s’, ’%s’, %d )}”,如果不帶參數,則沒有小括號,如果帶參數,字符串的參數需要加單引號。
  PostGre的調用方法是” _T( "select \"pg_modifyOneProduct\"( %d, ’%s’ )"”,“\“是轉義字符,因為在PostGre定義存儲過程時,如果存儲過程名稱加上了雙引號,那么在調用的時候,就一定要加上雙引號,SQL中應該就是這么規定的。還有一個存儲過程如果是想返回表中所有記錄,那么在調用存儲過程的時候就要使用Selece * from 存儲過程名。

百分百考試網 考試寶典

立即免費試用