C#中有什么东西可以用作数据库触发器

时间:2013-07-23 10:24:34

标签: c# triggers

我有ERP数据库“A”只有读取权限,我无法在表格上创建触发器。 A用于ERP系统(对我来说是Unknown Program)。我有另一个数据库“B”,这是我的应用程序私有这个应用程序在两个数据库上工作。我想立即将A的更改(对于任何插入/更新/删除)反映到B. 在c#中是否有任何功能可以像数据库中的触发器一样工作???

3 个答案:

答案 0 :(得分:3)

您的解决方案很少,最好的解决方案取决于您必须支持哪种数据库。

通用解决方案,不允许更改A数据库

如果您无法更改数据库,并且这必须适用于所有类型的数据库,那么您只有一个选项:投票

您不应该经常检查(因此忘记或多或少地立即执行)以节省网络流量,最好以不同的方式进行插入/更新/删除。您可以做什么取决于数据库的结构,例如:

插入 catch 一个插入内容,您只需检查最高行ID(假设您需要监控的内容有一个整数列用作键)。
更新:对于更新,您可以检查时间戳列(如果存在) 删除:这可能更难检测,第一次检查将是计数行数,如果它已更改且未发生插入,则您检测到删除,否则只减去插入次数。

通用解决方案,允许更改A数据库

如果您可以更改原始数据库,则可以使用数据库端的触发器减少网络流量(和复杂性),触发触发器时只需将记录放入内部 日志表< / strong>(只有几列:一列用于更改类型,一列用于受影响的表,一列用于受影响的记录)。

您只需要在此表上进行轮询(使用简单查询来检查行数是否增加)。由于操作(插入/更新/删除)存储在表中,您只需要打开该列即可执行正确的操作。

这有一个很大的缺点(在我看来):它将与您的应用程序相关的逻辑放在master数据库中。这可能很糟糕,但这取决于很多因素。

SQL Server /供应商特定

如果您的应用程序与Microsoft SQL Server绑定,则可以使用SqlDependency类来跟踪所做的更改。它仅适用于SS,但我认为可能有其他数据库的实现。缺点是这将始终特定于特定供应商(因此,如果数据库将更改主机...您也必须更改您的代码)。

来自MSDN:

  

SqlDependency旨在用于ASP.NET或中间层服务,其中存在相对较少数量的服务器,这些服务器具有对数据库的活动依赖性。它不是设计用于客户端应用程序,其中数百或数千台客户端计算机将为单个数据库服务器设置SqlDependency对象。

无论如何,如果你使用SQL Server,你还有其他选择,只需按照MSDN文档中的链接进行操作。

附录:如果您需要更精细的控制,可以查看TraceServerObject:Altered(和朋友)课程。这更加依赖于Microsoft SQL Server,但它应该可以在更广泛的环境中使用(并且您可能会让您的应用程序不知道这些事情)。

答案 1 :(得分:0)

根据您的DBMS,您可能会觉得有用:

更改数据捕获(MS SQL)

http://msdn.microsoft.com/en-us/library/bb522489%28v=SQL.100%29.aspx

数据库更改通知(Oracle)

http://docs.oracle.com/cd/B19306_01/appdev.102/b14251/adfns_dcn.htm   http://www.oracle.com/technetwork/issue-archive/2006/06-mar/o26odpnet-093584.html

不幸的是,数据更改通知没有SQL92解决方案

答案 2 :(得分:-2)

是有优秀的帖子请到这里查看..

http://devzone.advantagedatabase.com/dz/webhelp/advantage9.1/mergedprojects/devguide/part1point5/creating_triggers_in_c_with_visual_studio_net.htm

如果这篇文章解决了您的问题,请标记为已回答..

谢谢