2016-08-01 75 views
-3

我正在Web应用程序,我想如Marks_Table表是所有可用的时间,这样即使一个老师上传的痕迹,学生不应该被阻止看到从该表自己的商标。如何执行事务以及不锁定表以便其他人执行更改?

+0

引用该表可以使用'与(NOLOCK)'查询提示(尽管这可能会导致数据不一致等问题)的查询。如果你只更新一行,那么开销可能很小。 –

+0

将'WITH(NOLOCK)'添加到读取查询中? – TZHX

+0

我加入多行 –

回答

0

例如学生A的值为5,等级表中 现在,当学生A执行查询,他会看到5级

现在当老师忙于事务在该表上的学生得到来自任何结果他的查询,直到老师完成,因为他的交易锁定了表。

你想要的是该学生确实从他的查询获取resuls而老师在做交易,他只会看到一个值5,因为这是此表为他最后COMMITED值,对不对? 换句话说,学生可以击中F5,并会看到他们的旧值,直到教师提出新的值,这听起来像是一种正常的做事方式。

如果是的话,你可以试试这个:(只需要在你的数据库做一次)

ALTER DATABASE yourdatabase SET READ_COMMITTED_SNAPSHOT ON; 

看到这一点:https://www.brentozar.com/archive/2013/01/implementing-snapshot-or-read-committed-snapshot-isolation-in-sql-server-a-guide/

但也请记住,在你的数据库表上的所有交易应该保持尽可能短,这实际上可以避免这个问题。如果学生在刷新后不得不等待半秒钟才能显示结果,那么学生不会抱怨,如果他们必须等待几分钟,他们会投诉。

+0

我使用TransactionScope对象来完成并执行事务,会自动解决我的问题吗? –

+0

因为我已阅读,它使用序列化隔离级别 –

+0

我不熟悉的TransactionScope对象,但因为这ALTER语句是改变你的数据库中读取记录的方式,我认为它会 – GuidoG

相关问题