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

ADO 數據庫連接

編輯:VC++

  這些天一直在學習ADO 數據庫連接,感覺比較復雜,所以一邊學習,一邊使用,一邊做了一些筆記,下面的一些東西就是我總結的一些關於ADO數據庫連接方面的東西,因為是筆記,所以不一定很有序,貼出來的意思一方面是可以給大家一個參考,一邊也有希望大家一起來完善的意思,其中錯誤和不足之處當然希望大家可以及時地通知我,在貼上來的時候,我有一個想法,因為我在使用的過程中,總是會遇上一些莫明其妙的錯誤,所以我想大家有可能也會遇上,於是,我給出了一個錯誤總結,當然這裡就需要大家一起來完善了,如果大家有什麼心得和見解,希望在評論中留言,我會及時地接受大家的意見並把他們加進來(當然是在得到您的允許的情況下)

  1、導入庫文件

  使用ADO前必須在工程的stdafx.h文件最後用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下:
#import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","EndOfFile") rename("BOF","FirstOfFile")

  ADO類的定義是作為一種資源存儲在ADO DLL(msado15.dll)中,在其內部稱為類型庫。類型庫描述了自治接口,以及C++使用的COM vtable接口。當使用#import指令時,在運行時Visual C++需要從ADO DLL中讀取這個類型庫,並以此創建一組C++頭文件。這些頭文件具有.tli 和.tlh擴展名,讀者可以在項目的目錄下找到這兩個文件。在C++程序代碼中調用的ADO類要在這些文件中定義。

 程序的第三行指示ADO對象不使用名稱空間。在有些應用程序中,由於應用程序中的對象與ADO中的對象之間可能會出現命名沖突,所以有必要使用名稱空間。如果要使用名稱空間,則可把第三行程序修改為: rename_namespace("AdoNS")。第四行代碼將ADO中的EOF(文件結束)更名為adoEOF,以避免與定義了自己的EOF的其他庫沖突。

  2、初始化COM環境
  (1)::CoInitialize(NULL); //初始化OLE/COM庫環境
::  CoUninitialize();//既然初始化了環境,當然就有必要釋放他了
  (2)也可以調用MFC全局函數
  AfxOleInit();

  3、三大對象的定義和創建實例

  (1) _ConnectionPtr pConnection("ADODB.Connection");
  _RecordsetPtr pRecordset("ADODB.Recordset");
  _CommandPtr pCommand("ADODN.Command");

  (2) _ConnectionPtr pConnection;
  _RecordsetPtr pRecordset;
  _CommandPtr pCommand;
 
  pConnection.CreateInstance(__uuidof(Connection));
  pRecordset.CreateInstance(__uuidof(Recordset));
  pCommand.CreateInstance(__uuidof(Command));

  (3) _ConnectionPtr pConnection;
  _RecordsetPtr pRecordset;
  _CommandPtr pCommand;
 
  pConnection.CreateInstance("ADODB.Connection");
  pRecordset.CreateInstance("ADODB.Recordset");
 pCommand.CreateInstance("ADODB.Command");

  4、打開一個連接
  pConnection->Open(ConnectionString,"","",adModeUnknown);///連接數據庫

  上面的連接字符串ConnectionString根據不同的數據源,分別對應不同的寫法
  1)訪問Access 2000
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User ID=userName;Password=userPassWord"

  2)訪問ODBC數據
  " Provider=MADASQL;DSN=dsnName;UID=userName;PWD=userPassword;"

  3)訪問Oracle數據庫
  “Provider=MSDAORA;Data Sourse=serverName;User ID=userName;Password=userPassword;"

  3)訪問MS SQL數據庫
  "Provider=SQLOLEDB,Data Source=serverName;Initial Catalog=databaseName;User ID=userName;Password=userPassword;"

  4、執行SQL命令
  SQL命令比較多,但是不去考慮細節,這裡只說出通用的方法
  CString strSQL;//定義SQL命令串,用來保存SQL語句

  strSQL.Format("SQL statement");
 
  然後在每個要用到SQL命令串的方法中,使用strSQL.AllocSysString()的方法進行類型轉換

  5、com的專用數據類型

  variant ,bstr ,SafeArray

  variant變量的范圍包括很多,使用_variant_t 進行管理
  bstr是一種字符串變量,使用_bstr_t進行管理

  6、關閉連接

  if(m_pConnection->State)//不能多次關閉,否則會出現錯誤
  m_pConnection->Close();

  7、結構化異常處理
  ADO封裝了COM接口,所以需要進行錯誤處理
  如下例:
  HRESULT hr;
   try
  {
  hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象
  if(SUCCEEDED(hr))
  {
  hr = m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data   Source=test.mdb","","",adModeUnknown);///連接數據庫
  ///上面一句中連接字串中的Provider是針對ACCESS2000環境的,對於ACCESS97,需要改  為:Provider=Microsoft.Jet.OLEDB.3.51; }
  }
  catch(_com_error e)///捕捉異常
  {
  CString errormessage;
  errormessage.Format("連接數據庫失敗!\r\n錯誤信息:%s",e.ErrorMessage());
  AfxMessageBox(errormessage);///顯示錯誤信息
  }

  8、錯誤原因的分析
  (1)不支持接口,可能是不能插入空值

  好了,希望大家可以跟我一起完善這篇總結!

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved