数据库连接使用“try finally”

时间:2011-07-07 10:55:28

标签: delphi database-connection try-finally

有人可以使用try finally来处理数据库连接(和错误)吗? 什么是最佳做法? 看到各种风格,但我想知道什么是最好的方法。 是否应将表格的打开放在TRY块或主要连接中 串? 因为我通常把我的数据库(绝对数据库,访问..)放在我的exe文件夹中 我想知道最好的方法...... 或者首先检查文件,如...

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 个答案:

答案 0 :(得分: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 :(得分:1)

如果我无法打开数据库,我会终止应用程序 - 除非您专门构建一个处理此问题的体系结构,否则您无法在没有数据库访问的情况下执行此操作。

除此之外,只需让默认的应用程序错误处理程序处理错误,因为无论如何它都会非常意外。