2011-07-07 65 views
3

有人可以啓發我處理數據庫連接(和錯誤)使用try finally嗎? 最佳做法是什麼? 看到各種風格,但我不知道什麼是最好的方法。 應該打開表格放在TRY塊還是隻是主要連接 字符串? 因爲我通常把我的數據庫(絕對數據庫訪問。)在我的Exe文件夾中 我想知道有關文件的喜歡上了這最好的方法...... 還是第一次檢查...數據庫連接使用「try finally」

if (FileExists(sDatabasePath)) then begin 
    ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sDatabasePath+';Persist Security Info=False'; 
    try 
     ADOConnection1.Connected:=True; 
     ADOTable1.Open; 
    except 
     ShowMessage ('cant access the database !'); 
    end; 
end; 

? ??

回答

2

評論:

  • 切勿吞嚥異常,就像你在你的ShowMessage情況下基本上做到。調用你的程序的代碼將無法知道出了什麼問題。只有在可以修復它們時才處理錯誤,或者讓它們冒泡應用程序錯誤處理程序,它們將顯示給用戶。
  • 根據代碼的工作方式,您可能需要使用try-finally保護與數據庫的連接,以便在作業完成後斷開連接。我不這樣做,我通常保持連接在應用程序的生命週期中打開。
  • 根據您對ADOTable1所做的操作,您可能需要確保在您將其與try-finally塊一起使用時關閉。我通常這樣做是因爲我不使用Db感知的GUI控件,我是一個控制怪物。我也手動處理事務(啓動事務/提交/回滾)
  • 不要忽略錯誤。如果你的數據庫不存在(即:FileExists()返回false),調用你的過程的代碼不知道一件事情,用戶也不知道。

下面是我重新編寫代碼:

if (FileExists(sDatabasePath)) then 
    begin 
     ADOConnection1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+sDatabasePath+';Persist Security Info=False'; 
     ADOConnection1.Connected:=True; 
     try 
     ADOTable1.Open; 
     try 
      // Do non-GUI database stuff here. 
     finally ADOTabel1.Close; 
     end; 
     finally ADOConnection1.Connected := False; 
     end; 
    end 
else 
    raise Exception.Create('Database file not found'); 
1

如果我不能打開數據庫我終止應用程序 - 沒有什麼可以不用數據庫訪問做,除非你專門建立一個架構,處理這個。

除此之外,只是讓默認的應用程序錯誤處理程序處理錯誤,因爲無論如何它會是非常意外的。

+0

也許用戶希望訪問「設置」對話框來更改數據庫連接參數? – 2011-07-07 12:46:33

+0

@ldsandon,根據我的經驗,大多數應用程序設置數據庫連接一次,基本上不會改變它。我只開發企業級軟件,所以對其他類型的軟件可能會有所不同。 – Misha

+1

那麼,即使有些公司有時可能會將數據庫移動到不同的服務器:) – 2011-07-07 14:54:50