0

我正在用 C# 编写一个需要执行以下操作的应用程序:

在不连接数据库的情况下,我需要检查数据库中是否有一些新日志。如果有,那么我可以打开连接并检索它们。

所以我只需要知道数据库中是否有新的日志(元素)而不打开与它的连接。

服务器可以向管理员发送邮件,我可以监视邮箱的更改,但该解决方案是不可接受的。

插入新行的服务器可以*.txt在磁盘上创建带有文本指示新行的文件,我可以在下载更改后检查和删除/编辑这些新行吗?

(数据库在 SQL Server 2008 R2 中)

甚至可能吗?欢迎任何/和/或其他选项来执行此操作。

提前非常感谢大家。

4

3 回答 3

2

根据 OP 在问题下的以下澄清评论:

有一个 Web 应用程序每 30 秒检查一次更改并显示最新的授权。数据库正在跟踪员工授权并经常更新。现在我正在构建桌面应用程序,它与服务器有本地连接并且可以更频繁地更新,但是客户端不希望应用程序每秒打开连接,aldo 连接打开了几毫秒。

我认为合适的解决方案是业务层。

如果您构建一个托管在 IIS 中的业务层,它代表使用单个数据库用户进行访问的用户(应用程序池用户或 Web 应用程序中的模拟用户)执行数据库访问,那么连接池将减少连接数对数据库进行了显着。

这是一篇 MSDN 文章,它非常详细地描述了连接池的机制和好处。

所有客户端,包括 Web 层,都将使用 WCF 或 .Net Remoting(取决于您的 .Net 版本)连接到业务层,而业务层将是唯一执行数据库访问的应用程序。

这种方法的额外好处是您可以将所有数据库访问(包括来自 Web 客户端的)移动到 DMZ 内,这样就不会从 DMZ 向外直接访问数据库。这对您的客户来说可能是一个很好的卖点。

我们将这种机制广泛用于非常大、非常注重安全性和性能的客户。

更新

作为替代方案,您可以让业务层每 30 秒查询一次数据库,提取必要的信息,并将其本地存储到某种数据库(Access、Sql Server Express 等)中的业务层。当收到来自客户端的请求时,将从本地数据存储而不是数据库为它们提供服务。

您可以通过在 global.asax 的 Application_Start 事件中启动后台线程或通过添加每 30 秒过期的缓存条目并在缓存超时事件中执行工作来做到这一点。

这将每 30 秒(或任何时间)将连接数减少到 1 个(如果未修改网络,则为 2 个)。

于 2011-12-28T11:01:19.017 回答
0

尝试监视 DB 文件夹内的文件更改日期。

于 2011-12-28T10:00:02.050 回答
0

如果不打算大规模部署客户端桌面应用程序,您可以使用SqlDependency. 这样您就不必频繁地轮询数据库,而是数据库会在发生变化时通知您。

您还可以在使用该服务的服务器上部署一项服务SqlDependency,然后从您的桌面应用程序连接到该服务。

如果这不是一个选项,本文档会提到一些其他选项。

这两个可以应用于您的情况:

  • 在被监视的表上创建一个 AFTER UPDATE 触发器,其操作使用 SQL Server Service Broker 向需要通知的实体发送消息。
  • 使用支持更改通知机制的 Windows Server App Fabric 缓存,它基于内存中的对象缓存和您在对象中注册的回调函数。
于 2011-12-28T10:12:16.680 回答