如何使用c#捕获数据库中已更改的值

本文关键字:数据库 何使用 | 更新日期: 2023-09-27 18:11:47

我花了一整天的时间试图弄清楚如何捕获特定列中的值已更改以触发一些计算。我正在使用c#和MS Access数据库。

我有3列在我的数据库:时间,罢工和vol.

我只对vol列发生变化感兴趣,这样我就可以触发计算。

我研究了委托和事件,但我认为应该有一种更简单的方法。

你们知道怎么做吗?

如何使用c#捕获数据库中已更改的值

在数组中保存表的本地副本,然后定期将访问表与数组中的访问表进行比较,如果检测到变化,则启动功能。

虽然Access数据库不提供真正的TRIGGER功能,但如果您正在使用Access 2010或更高版本,您可能会发现数据宏很有帮助。您可以添加一个[volChanged]列(Yes/No, Indexed (duplicate OK)),然后创建以下"Before Change"数据宏:

If Updated("vol") Then
    SetField
        Name   volChanged
        Value  =True
End If

一旦该宏就位,对任何记录上的[vol]字段的更改将使该记录的[volChanged]标志更改为True。在一个有两条记录的示例表上,它们都将[volChanged]设置为False,下面的Excel VBA代码…

Sub volChangeTest()
Dim con As ADODB.Connection, rst As ADODB.Recordset, sql As String
Set con = New ADODB.Connection
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:'Users'Gord'Desktop'Database1.accdb;"
Set rst = New ADODB.Recordset
rst.Open "SELECT COUNT(*) AS n FROM volTable WHERE volChanged", con
Debug.Print "[volChanged] is True for " & rst(0).Value & " record(s)"
rst.Close
sql = "UPDATE volTable SET vol = vol + 1"
Debug.Print sql
con.Execute sql
rst.Open "SELECT COUNT(*) AS n FROM volTable WHERE volChanged", con
Debug.Print "[volChanged] is True for " & rst(0).Value & " record(s)"
rst.Close
Set rst = Nothing
con.Close
Set con = Nothing
End Sub

…生成以下结果:

[volChanged] is True for 0 record(s)
UPDATE volTable SET vol = vol + 1
[volChanged] is True for 2 record(s)

Data Macro本身不能触发任何外部进程,但是由于[volChanged]字段很小并且有索引,您可以以最小的开销非常频繁地查找"更新",当然比在某处维护"旧值"列表并使用它逐行搜索更改要少。