有人可以使用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;
???
答案 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)
如果我无法打开数据库,我会终止应用程序 - 除非您专门构建一个处理此问题的体系结构,否则您无法在没有数据库访问的情况下执行此操作。
除此之外,只需让默认的应用程序错误处理程序处理错误,因为无论如何它都会非常意外。