C#/SQL更改日志记录-最佳方法

本文关键字:记录 最佳 方法 日志 SQL | 更新日期: 2023-09-27 18:26:40

不确定这个问题是否适合StackOverflow,因为它更"一般"。基本上,我有一个用ASP.NET和C#制作的数据库驱动的业务应用程序,一家公司的大约20名成员将使用它。这方面的一个关键方面是审计——我需要登录对任何表的任何更改,并让高级员工查看这些更改。

我目前的解决方案使用SQL触发器,但我需要创建更健壮、更用户友好的解决方案。数据库非常庞大,有很多带有关系等的表,目前的审计对用户来说非常没有信息——告诉工作人员x用户修改了订单以拥有ID为837的客户几乎是无用的——我需要能够指定审计日志中显示的字段。

我的想法是在代码中创建一个类来处理所有这些,并以某种方式映射出要向用户显示的字段,同时告诉代码哪个表被修改了,哪个记录被修改了。

有人能就如何做我想做的事,以及这是否真的可行,提供一些一般性的建议吗?我是代码中LINQ to SQL的重度用户,所以我希望这会有所帮助。。。

C#/SQL更改日志记录-最佳方法

您也可以根据需要尝试使用DoddleAudit。它只需一行代码就可以自动审核数据库中任何表的所有插入/更新/删除,包括:

What table was modified?
What fields changed?
Who made the change?
When did it occur? 

你可以在这里找到它:http://doddleaudit.codeplex.com/

我对医疗保健应用程序有类似的审计要求,该应用程序使用linq到sql进行数据访问。

在Linq-to-sql中集中执行此操作的一种方法是覆盖数据上下文类中的SubmitChanges。在提交更改之前,请调用GetChangeSet()以获取有关挂起的更改的数据。然后在调用base.SubmitChanges()之前,将适当的更改跟踪信息添加到相关的日志表中。在我的应用程序中,我使用xml列能够以结构化的方式存储不同表的更改数据,而不必为系统中的每个表创建特殊的历史记录表。

您也可以尝试使用SQL Server 2008的变更数据捕获功能。它基本上捕获对所需表的插入、更新和删除,并将所做的更改存储到一组单独的关系表中。

http://www.mssqltips.com/sqlservertip/1474/using-change-data-capture-cdc-in-sql-server-2008/