我正在用C#编写一个需要执行以下操作的应用程序:
没有连接到数据库我需要检查数据库中是否有新的日志。如果有,那么我被允许打开连接并检索它们。
所以我只需要知道数据库中是否有新的日志(元素)而不打开它的连接。
服务器可以向管理员发送邮件,我可以监控邮箱的更改,但该解决方案是不可接受的。
服务器在插入新行时是否可以在磁盘上创建*.txt
文件,文本指示新行,我可以在下载更改后检查和删除/编辑?
(数据库在SQL Server 2008 R2中)
甚至可能吗?任何/和/或其他选择都是受欢迎的。
非常感谢你们。
答案 0 :(得分:2)
根据OP在该问题下的以下澄清意见:
有一个Web应用程序每隔30秒检查一次更改并显示最新的授权。数据库正在跟踪员工授权并经常更新。现在我正在构建桌面应用程序,它具有与服务器的本地连接并且可以更频繁地更新,但客户端确实 - 不希望应用程序每秒打开连接,aldo连接打开几ms。
我认为适当的解决方案是业务层。
如果构建IIS中托管的业务层,代表用户使用单个数据库用户进行访问(应用程序池用户或Web应用程序中的模拟用户)执行数据库访问,则连接池将减少显着与数据库建立的连接数。
Here is an MSDN article详细描述了连接池的机制和优势。
所有客户端(包括Web层)都将使用WCF或.Net Remoting(取决于您的.Net版本)连接到业务层,业务层将是唯一执行数据库访问的应用程序。
此方法的另一个好处是,您可以在DMZ内移动所有数据库访问(包括从Web客户端),以便无法从DMZ向外直接访问数据库。这对您的客户来说可能是一个很好的卖点。
我们广泛使用这种机制来满足非常大,非常安全和注重性能的客户。
<强>更新强>
作为替代方案,您可以让业务层每30秒查询一次数据库,提取必要的信息,并将其本地存储到某种数据库(Access,Sql Server Express等)中的业务层。收到客户端的请求后,将从本地数据存储而不是数据库提供这些请求。
您可以通过在global.asax的Application_Start事件中启动后台线程,或者通过添加每30秒到期的缓存条目并在缓存超时事件中执行工作来完成此操作。
这将每30秒(或任何时间)将连接数减少为1(如果未修改网络,则为2)。
答案 1 :(得分:0)
尝试监控DB文件夹中的文件更改日期。
答案 2 :(得分:0)
如果不会大规模部署客户端桌面应用程序,则可以使用SqlDependency
。然后,您不必经常轮询数据库,而是数据库会在发生变化时通知您。
您还可以在使用SqlDependency
的服务器上部署服务,然后从桌面应用程序连接到此服务。
如果这不是一个选项,this document会提到其他一些选项。
这两个可以适用于您的情况: