Vb.net 如何允许从多个程序更新数据库表
由于ADO.Net使用“断开连接”模型,其中单个程序可用的数据只是数据库中数据的副本,因此处理需要更新数据库中同一表的多个程序的正常方式是什么?我看到的问题是,除非程序的数据副本是最新的,否则程序无法更新。我们是否应该在更新之前阅读,并希望更新发生在其他人更改数据之前?首选的设计模式是使用ExecuteOnQuery方法实现SQL更新;并尽可能使用参数化SQLVb.net 如何允许从多个程序更新数据库表,vb.net,architecture,ado.net,Vb.net,Architecture,Ado.net,由于ADO.Net使用“断开连接”模型,其中单个程序可用的数据只是数据库中数据的副本,因此处理需要更新数据库中同一表的多个程序的正常方式是什么?我看到的问题是,除非程序的数据副本是最新的,否则程序无法更新。我们是否应该在更新之前阅读,并希望更新发生在其他人更改数据之前?首选的设计模式是使用ExecuteOnQuery方法实现SQL更新;并尽可能使用参数化SQL Dim cnn As SqlConnection Dim cmd As SqlCommand Dim sql A
Dim cnn As SqlConnection
Dim cmd As SqlCommand
Dim sql As String
sql = "UPDATE Table_A SET SomeField=SomeValue,SomeOtherField=SomeOtherValue WHERE SomeKeyField=SomeKeyValue"
cnn = New SqlConnection(connectionString)
cnn.Open()
cmd = New SqlCommand(Sql, cnn)
cmd.ExecuteNonQuery()
cmd.Dispose()
cnn.Close()
这样,通常不需要先读取记录。通过WHERE子句标识所需的一行或多行
有关SQL参数的示例,请参见:
顺便说一句,如果您不熟悉ADO.NET,但了解ADO,这篇MS文章可能会有所帮助:
我想最常见的方法是通过乐观并发控制。这种类型的货币控制在不太可能争用相同数据的系统中运行良好
我通常通过在SQLServer中使用时间戳列来实现乐观并发控制。每次更新一行时,时间戳列都会更新为一个新值。当您想要更新一行时,首先检查它的时间戳,看它是否与本地副本匹配。如果更改了,通常会告诉用户发生了并发冲突,并提供某种类型的解决方案,例如允许用户决定保留哪个版本(本地版本或数据库版本)。谢谢,Casey。你提供的链接证实了我当时的想法。