在C#中检测SqlServr.exe WriteFile操作

时间:2008-11-04 22:34:38

标签: c# .net winapi

当数据库更新时,我们需要支持在本地SQL Server数据库中查询新数据。由于这些是外部SQL Server数据库,我们可能无法使用SQL Server Notification Services,也无法对数据库进行任何更改。

我的基本想法是监视写入数据库的数据以触发查询(而不是按设定的时间间隔进行轮询)。但是,我很难弄清楚如何从SqlServr.exe进程中获取WriteFile调用(可以在Sysinternals的Process Monitor等工具中监视)。谁能指导我哪些Win32功能可以帮助我?

3 个答案:

答案 0 :(得分:1)

你可能无法拦截SQL Server进程正在进行的FileWrite()调用 - 如果存在,那将是一个巨大的安全漏洞。

幸运的是,您不需要,因为文件系统为您提供了您所需要的。

System.IO.FileSystemWatcher类允许您监视文件或目录中的活动,并在发生更改时触发事件。您应该可以快速启动并运行原型,以(证明)您的方法的可行性。

然而,我认为你会发现这种方法不如简单的民意调查有效 - 因为我怀疑你最终会频繁地触发你自己的更新过程。

答案 1 :(得分:0)

我不认为通过文件系统是最好的选择。即使你可以访问文件系统活动,我认为很难分辨哪些文件操作添加数据与任何其他类型的文件活动,如维护,索引defrags等。

一种可能的替代方法是将Microsoft.SqlServer.Management.Trace Namespace作为一种挂钩到SQL Server的机制,并查找要响应的特定事件。但是,我会注意到这可能会对性能产生影响。

答案 2 :(得分:0)

正如其他提到的答案一样,SQL也会执行一些内部管理,这可能会触发您的WriteFile或其他低级监控过程。

是否可以编写一个包装器数据库,您连接到该数据库,存储所有更改或最新更改的时间戳。并将它们发送到真正的存储。我认为你可以通过观点做这样的事情。性能不是最佳的。