Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 在服务器数据库的任何更改上更新客户端_Database_Visual Studio_Sql Server 2008_Networking - Fatal编程技术网

Database 在服务器数据库的任何更改上更新客户端

Database 在服务器数据库的任何更改上更新客户端,database,visual-studio,sql-server-2008,networking,Database,Visual Studio,Sql Server 2008,Networking,我在VS+SQL Server 2008上制作了一个程序,并在通过局域网连接的3台计算机组成的家庭网络上启动了该程序。该程序从数据库中提取数据并将其放入数据集,因此用户将处理数据集,数据集上的任何更新、删除或添加都将更新数据库。 数据库位于运行相同应用程序的一台PC(服务器)上,其他两台PC只是客户端,从服务器数据库获取数据 我的问题是,当一台电脑更新数据库时,其他电脑不知道该更新,因此,例如,如果一个用户删除一个项目,而另一个用户删除相同的项目,则会导致错误 我的问题很明显:我怎样才能使所有的

我在VS+SQL Server 2008上制作了一个程序,并在通过局域网连接的3台计算机组成的家庭网络上启动了该程序。该程序从数据库中提取数据并将其放入数据集,因此用户将处理数据集,数据集上的任何更新、删除或添加都将更新数据库。 数据库位于运行相同应用程序的一台PC(服务器)上,其他两台PC只是客户端,从服务器数据库获取数据

我的问题是,当一台电脑更新数据库时,其他电脑不知道该更新,因此,例如,如果一个用户删除一个项目,而另一个用户删除相同的项目,则会导致错误

我的问题很明显:我怎样才能使所有的电脑都因数据库的任何变化而更新


最后一件事是,每个应用程序只与服务器上的SQL server数据库通信,而不与其他PC上的其他应用程序通信。

这是一个常见问题,通常(现在)通过乐观并发检查来处理-基本上,允许用户尝试删除/更新,但当行过期时失败

乐观并发的基本模式是每行都有
rowversion
列。在执行更新之前,请将内存中的
行版本
与服务器
行版本
进行比较。如果它们不匹配,那么您知道其他人已经更新了该行,需要重新加载该行。对于
DELETE
,我个人会默默地让
DELETE
失败——毕竟,如果用户想要删除一行,那么事先删除它真的很重要吗

另一种模式是悲观模式,它基本上是在任何用户处理行时锁定该行。这有服务器资源、用户离开机器等明显的缺点,但可以使用SQL server锁定(例如,更新事务的
)或应用程序级锁定(例如,检查共享数据库表)来实现


使用MS SQL Server,您还有一个简单的选择-。这允许SQL Server在查询结果发生更改时通知您(通过事件处理程序),此时您可以重新加载数据。正如您所想象的,这需要一些服务器资源,但由于您只有三个客户端,没有中间层,因此它应该是理想的。

谢谢,实际上它是一个大项目,包含三个以上的客户端,并且它确实包含一个中间层,我将检查SqlDependency,但我有一个问题:大公司在这种情况下会做什么?我的意思是什么是最有效的方法???@alihaider-取决于需求。如果您在一个连接的场景中工作(听起来像是这样),那么您通常不需要从数据库中提取大型数据集。这在很大程度上避免了问题(不同的客户端通常在数据库的不同行/表上工作),然后乐观并发处理了罕见的冲突。如果您有中间层,则可以让中间层缓存数据,并在发生更新时使缓存失效(或使用SqlDependency),并将更新的信息分发给客户端(轮询、长轮询、回调、远程事件等)这是一个有很多POS客户端的库存系统……你怎么看?@alihaider-听起来乐观并发可以工作。当他们查看该屏幕时加载产品,当他们查看详细信息时加载特定产品。当他们转到保存时,检查行版本,如果不同,则不允许保存,但强制刷新。如果他们删除了并且该产品已经被删除,请强制刷新,无论是否有关于该产品已被删除的警告。谢谢。我将乐观地尝试乐观类型