我们开发了一个Windows应用程序,该应用程序像常规应用程序一样工作;收集大量信息,对其进行处理并生成报告...并使用SQL Server存储数据。对于报表,我们使用了Crystal Reports。
我们的办公室中使用该应用程序的员工超过150名。其中大多数是数据输入运算符。因此,尽管数据存储假定任何人都试图生成报告,但应用程序停止工作并发生死锁。创建了用于存储信息的不同线程和用于检索相同信息(或生成报告)的不同线程。
所以问题是如何避免出现死锁情况,因为存储数据和生成报告是连续的过程,因此无法要求先存储数据,然后对其进行处理然后生成报告...
如何同时做两件事,即存储和检索数据? 有什么办法可以避免死锁吗?
欢迎与此相关的任何建议或查询。
更新
在这种情况下,使用视图是否有用?
谢谢!
答案 0 :(得分:2)
答案 1 :(得分:1)
我会在您的sql服务器中打开Read Committed Snapshot Isolation
,以使编写者不会阻止读者。但是读者只有提交后才能阅读书面记录。
换句话说,不要阻止读者,也不要做脏读
答案 2 :(得分:1)
您可以尝试这样做以避免数据库死锁。
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
BEGIN TRANSACTION;
答案 3 :(得分:1)
默认情况下,对于ODBC连接,Crystal Reports使用驱动程序支持的最高数据库隔离级别,即“读取已提交”。您可以添加一个注册表项,以指示Crystal使用较低的隔离级别。
以下是提供完整说明的文档: 1216415 - How to change the isolation level for an ODBC connection in Crystal Reports?