C# SQL Server“;检查数据库表是否有一个正在进行的进程;
我想做的是,通知用户我的程序“数据库中正在进行更新,因此结果可能不正确。”因此,我必须检查我的程序使用的表上是否有某些进程(如写入或删除) 编辑:我更新表格的方式是使用MS Access,从MS Excel复制大约10.000行,并使用MS Access将其粘贴到数据库中。因此,当复制粘贴正在进行时,我希望能够从基于web的程序中看到它C# SQL Server“;检查数据库表是否有一个正在进行的进程;,c#,sql-server,sql-server-2000,C#,Sql Server,Sql Server 2000,我想做的是,通知用户我的程序“数据库中正在进行更新,因此结果可能不正确。”因此,我必须检查我的程序使用的表上是否有某些进程(如写入或删除) 编辑:我更新表格的方式是使用MS Access,从MS Excel复制大约10.000行,并使用MS Access将其粘贴到数据库中。因此,当复制粘贴正在进行时,我希望能够从基于web的程序中看到它 谢谢。在某个地方(在过程中,或者在服务器上,在文件或共享内存中等)创建一个共享计数器。你的更新是这样的吗 increment the counter query
谢谢。在某个地方(在过程中,或者在服务器上,在文件或共享内存中等)创建一个共享计数器。你的更新是这样的吗
increment the counter
query(UPDATE blablabla)
decrement the counter
如果计数器大于0,则显示消息
(但这是你真正想要的吗?请看评论)我不确定我是否理解你在这里想要实现的目标 SQL Server为您管理数据的完整性和一致性,前提是您使用合适的隔离级别 因此,如果计数/报告查询尝试访问当前正在更新的记录,则在更新操作完成之前,它将无法获取共享锁(在当前正在更新的记录上),从而确保仅报告提交的数据。因此,报告在完成时是正确的
如需进一步阅读,请参阅:更新,回复: “编辑:我更新表格的方式是使用MS Access,从MS Excel复制大约10.000行,然后使用MS Access将其粘贴到数据库中。因此,在复制粘贴过程中,我希望能够从基于web的程序中看到它。” 原理是一样的,在粘贴过程开始时,添加一个DB行,就像我的第一个答案一样。或者,您可以在web应用程序中设置一个全局变量,类似于
updateInProgress=true
但是,这本书需要多长时间?如果少于5分钟,那么可能不值得做任何其他事情
如果您只是想让用户知道有“新鲜”数据,可以查询最近的日期时间
什么样的更新?通常,SQL Server使用默认事务锁定来保持结果的准确性 也许你的意思是一个长期的数据导入工作?或者,天哪,是某种密集的、光标驱动的过程 然后你可以做一些类似的事情:
或者,SQL日志中可能提供此开始-停止信息。不过,整理它可能需要一些工作。你不能这样做,以使更新永远不会与读取同时进行,例如事务?永远不要实现你自己的更新locking@gbn为什么不呢?有时,您需要做的不仅仅是更新数据库(编写常规文件或其他),在这种情况下,使用数据库提供的功能是没有意义的。锁定表上的并发性也会有同样的问题。。。如果您不想等待,可以设置@locktimeout,例如。同样在这种情况下,客户端命令超时会发生什么情况?您的计数器保持>0=拧紧…@gbn,然后制作一个具有超时的智能计数器。是的,一定要小心。不,这不是火箭科学。但是,如果数据库确实提供了一个合适的选项(我之前评论中的限制不适用),我当然同意应该使用该选项。