gpt4 book ai didi

delphi - 使用 "try finally "的数据库连接

转载 作者:行者123 更新时间:2023-12-03 15:55:14 25 4
gpt4 key购买 nike

有人可以启发我如何使用 try finally 处理数据库连接(和错误)吗?最好的做法是什么?见过各种风格,但我想知道什么是最好的方法。表的打开应该放在 TRY block 中还是仅仅放在主连接中字符串 ?因为我通常将我的数据库(绝对数据库,access..)放在我的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;

???

最佳答案

评论:

  • 永远不要吞下异常,就像您在 ShowMessage 案例中所做的那样。调用您的过程的代码无法知道出了什么问题。仅在可以修复错误时才处理错误,或者让它们在应用程序错误处理程序中冒泡,并在其中向用户显示错误。
  • 根据代码的工作方式,您可能希望使用 try-finally 保护与数据库的连接,以便在作业完成后断开连接。我不会这样做,我通常在应用程序的生命周期内保持连接打开。
  • 根据您对 ADOTable1 执行的操作,您可能希望确保在将其与其他 try-finally block 一起使用后将其关闭。我通常这样做是因为我不使用 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');

关于delphi - 使用 "try finally "的数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com