每当在数据库中插入或更新记录时,我如何跟踪或获得通知?每当数据库发生此类更改时,我想以近乎实时的方式通知外部应用程序更改。是否有独立于 DBMS 和独立于应用程序编程语言的方法来做到这一点?如果不是,那么特别是 MS Access 和 MS SQL Server 是否有可能?我当然希望避免对 DB 进行连续轮询。
4 回答
我认为最新版本的 Microsoft SQL Server 允许您根据服务器条件和事件在 .NET 代码中引发事件。我没有尝试过,也没有听说过任何“独立于 DBMS”的方式(无需每 X 毫秒轮询一次 DB)。
使用 SQL Server,可以在 SQL Server 本身中加载一个 DLL,并使用扩展存储过程从中调用方法。然后,DLL 可以通知其他应用程序——通常是通过 TCP 套接字。
使用 MS-Access,我使用主表中的字段来跟踪记录更改或记录添加,这些字段存储用户名和创建或更新记录的日期。
您需要使用windows API 来记录用户名,通常在打开总机窗体时运行。
我正在挖掘寻找跟踪特定变化的方法。我的数据库用于项目管理。我想跟踪具体更改的内容,而不仅仅是我现在拥有的人员和时间。
我认为这符合原始问题的要求。稍后我可以添加读取用户名的 Windows API。
Private Sub Form_BeforeInsert(Cancel As Integer) Me!UserCreated = UCase(CurrentUser()) Me!DateCreated = Now() End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer) Me!DateModified = Now() Me!UserModified = UCase(CurrentUser()) End Sub
——迈克
要使用 SQL Server 执行此操作,您可以使用通知服务 - 编写一个 dll 订阅来自数据库的通知以获取您可以通过某种方式处理的数据更新。
但是,MS 表示他们正在从 SQL Server 2008 中删除它。
Oracle 也有类似的东西(尽管他们倾向于保留他们的技术),但我还没有看到任何与数据库无关的东西。