程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> VC++下使用ADO編寫數據庫程序(1)

VC++下使用ADO編寫數據庫程序(1)

編輯:C++入門知識
預備: (1)、引入ADO類 #import "c:program filescommon filessystemadomsado15.dll"
  
  no_namespace
  
  rename ("EOF", "adoEOF")
  
  (2)、初始化COM 在MFC中可以用AfxOleInit();非MFC環境中用:
  
  CoInitialize(NULL);
  
  CoUnInitialize(); (3)#import 包含後就可以用3個智能指針了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 1.連接和關閉數據庫 (1)連接 例子:連接Access數據庫
  
  AfxOleInit();//初始化
  
  HRESULT hr;
  
  try
  
  {
  
  hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
  
  if(SUCCEEDED(hr))
  
  {
  
  m_pConnection->ConnectionTimeout = 0;
  
  hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb", "", "", adModeUnknown);
  
  //m_pConnection->PutDefaultDatabase ((_bstr_t)"DB");//設置默認數據庫 m_pCommand.CreateInstance(__uuidof(Command));
  
  m_pCommand->CommandTimeout = 5;
  
  m_pCommand->ActiveConnection = m_pConnection;
  
  }
  
  }
  
  catch(_com_error e)///捕捉異常
  
  {
  
  CString errormessage;
  
  errormessage.Format("連接數據庫失敗! 錯誤信息:%s",e.ErrorMessage());
  
  AfxMessageBox(errormessage);///顯示錯誤信息
  
  } (2)、關閉 //假如數據庫連接有效
  
  if( m_pConnection->State )
  
  m_pConnection->Close();
  
  m_pConnection = NULL;  (3)、設置連接時間 //設置連接時間-----------------------------------
  
  pConnection->put_ConnectionTimeout(long(5));
  
  2.打開一個結果集 (1)打開,首先創建一個_RecordsetPtr實例,然後調用Open()得到一條SQL語句的執行結果
  
  _RecordsetPtrm_pRecordset;
  
  m_pRecordset.CreateInstance(__uuidof(Recordset)); // 在ADO操作中建議語句中要常用try...catch()來捕捉錯誤信息,
  
  // 因為它有時會經常出現一些意想不到的錯誤。jingzhou xu
  
  try
  
  {
  
  m_pRecordset->Open("SELECT * FROM DemoTable",// 查詢DemoTable表中所有字段
  
  m_pConnection.GetInterfacePtr(),  // 獲取庫接庫的IDispatch指針
  
  adOpenDynamic,
  
  adLockOptimistic,
  
  adCmdText);
  
  }
  
  catch(_com_error *e)
  
  {
  
  AfxMessageBox(e->ErrorMessage());
  
  } (2)關閉結果集 m_pRecordset->Close(); 3.操作一個結果集 (1)、遍歷(讀取)
  
  a)、用pRecordset->adoEOF來判定數據庫指針是否已經移到結果集的末尾了;m_pRecordset->BOF判定是否 在第一條記錄前面: while(!m_pRecordset->adoEOF)
  
  {
  
  var = m_pRecordset->GetCollect("Name");
  
  if(var.vt != VT_NULL)
  
  strName = (LPCSTR)_bstr_t(var);
  
  var = m_pRecordset->GetCollect("Age");
  
  if(var.vt != VT_NULL)
  
  strAge = (LPCSTR)_bstr_t(var);
  
  m_AccessList.AddString( strName + " --> "+strAge );
  
  m_pRecordset->MoveNext();
  
  }
   b)、取得一個字段的值的辦法有兩種辦法 一是 //表示取得第0個字段的值 m_pRecordset->GetCollect("Name"); 或者 m_pRecordset->GetCollect(_variant_t(long(0)); 二是
  
  pRecordset->get_Collect("COLUMN_NAME"); 或者 pRecordset->get_Collect(long(index)); (2)、添加 a)、調用m_pRecordset->AddNew();
  
  b)、調用m_pRecordset->PutCollect();給每個字段賦值
  
  c)、調用m_pRecordset->Update();確認 (3)、修改
  
  (4)、刪除
  
  a)、把記錄指針移動到要刪除的記錄上,然後調用Delete(adAffectCurrent) try
  
  {
  
  // 假設刪除第二條記錄
  
  m_pRecordset->MoveFirst();
  
  m_pRecordset->Move(1);       
  
  // 從0開始
  
  m_pRecordset->Delete(adAffectCurrent); 
  
  // 參數adAffectCurrent為刪除當前記錄
  
  m_pRecordset->Update();
  
  }
  
  catch(_com_error *e)
  
  {
  
  AfxMessageBox(e->ErrorMessage());
  
  } 預備: (1)、引入ADO類 #import "c:program filescommon filessystemadomsado15.dll"
  
  no_namespace
  
  rename ("EOF", "adoEOF")
  
  (2)、初始化COM 在MFC中可以用AfxOleInit();非MFC環境中用:
  
  CoInitialize(NULL);
  
  CoUnInitialize(); (3)#import 包含後就可以用3個智能指針了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 1.連接和關閉數據庫 (1)連接 例子:連接Access數據庫
  
  AfxOleInit();//初始化
  
  HRESULT hr;
  
  try
  
  {
  
  hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
  
  if(SUCCEEDED(hr))
  
  {
  
  m_pConnection->ConnectionTimeout = 0;
  
  hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb", "", "", adModeUnknown);
  
  //m_pConnection->PutDefaultDatabase ((_bstr_t)"DB");//設置默認數據庫 m_pCommand.CreateInstance(__uuidof(Command));
  
  m_pCommand->CommandTimeout = 5;
  
  m_pCommand->ActiveConnection = m_pConnection;
  
  }
  
  }
  
  catch(_com_error e)///捕捉異常
  
  {
  
  CString errormessage;
  
  errormessage.Format("連接數據庫失敗! 錯誤信息:%s",e.ErrorMessage());
  
  AfxMessageBox(errormessage);///顯示錯誤信息
  
  } (2)、關閉 //假如數據庫連接有效
  
  if( m_pConnection->State )
  
  m_pConnection->Close();
  
  m_pConnection = NULL;  (3)、設置連接時間 //設置連接時間-----------------------------------
  
  pConnection->put_ConnectionTimeout(long(5));
  
  2.打開一個結果集 (1)打開,首先創建一個_RecordsetPtr實例,然後調用Open()得到一條SQL語句的執行結果
  
  _RecordsetPtrm_pRecordset;
  
  m_pRecordset.CreateInstance(__uuidof(Recordset)); // 在ADO操作中建議語句中要常用try...catch()來捕捉錯誤信息,
  
  // 因為它有時會經常出現一些意想不到的錯誤。jingzhou xu
  
  try
  
  {
  
  m_pRecordset->Open("SELECT * FROM DemoTable",// 查詢DemoTable表中所有字段
  
  m_pConnection.GetInterfacePtr(),  // 獲取庫接庫的IDispatch指針
  
  adOpenDynamic,
  
  adLockOptimistic,
  
  adCmdText);
  
  }
  
  catch(_com_error *e)
  
  {
  
  AfxMessageBox(e->ErrorMessage());
  
  }
   (2)關閉結果集 m_pRecordset->Close(); 3.操作一個結果集 (1)、遍歷(讀取)
  
  a)、用pRecordset->adoEOF來判定數據庫指針是否已經移到結果集的末尾了;m_pRecordset->BOF判定是否 在第一條記錄前面: while(!m_pRecordset->adoEOF)
  
  {
  
  var = m_pRecordset->GetCollect("Name");
  
  if(var.vt != VT_NULL)
  
  strName = (LPCSTR)_bstr_t(var);
  
  var = m_pRecordset->GetCollect("Age");
  
  if(var.vt != VT_NULL)
  
  strAge = (LPCSTR)_bstr_t(var);
  
  m_AccessList.AddString( strName + " --> "+strAge );
  
  m_pRecordset->MoveNext();
  
  } b)、取得一個字段的值的辦法有兩種辦法 一是 //表示取得第0個字段的值 m_pRecordset->GetCollect("Name"); 或者 m_pRecordset->GetCollect(_variant_t(long(0)); 二是
  
  pRecordset->get_Collect("COLUMN_NAME"); 或者 pRecordset->get_Collect(long(index)); (2)、添加 a)、調用m_pRecordset->AddNew();
  
  b)、調用m_pRecordset->PutCollect();給每個字段賦值
  
  c)、調用m_pRecordset->Update();確認 (3)、修改
  
  (4)、刪除
  
  a)、把記錄指針移動到要刪除的記錄上,然後調用Delete(adAffectCurrent) try
  
  {
  
  // 假設刪除第二條記錄
  
  m_pRecordset->MoveFirst();
  
  m_pRecordset->Move(1);       
  
  // 從0開始
  
  m_pRecordset->Delete(adAffectCurrent); 
  
  // 參數adAffectCurrent為刪除當前記錄
  
  m_pRecordset->Update();
  
  }
  
  catch(_com_error *e)
  
  {
  
  AfxMessageBox(e->ErrorMessage());
  
  }
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved