Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.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
Vb.net 如何允许从多个程序更新数据库表_Vb.net_Architecture_Ado.net - Fatal编程技术网

Vb.net 如何允许从多个程序更新数据库表

Vb.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

由于ADO.Net使用“断开连接”模型,其中单个程序可用的数据只是数据库中数据的副本,因此处理需要更新数据库中同一表的多个程序的正常方式是什么?我看到的问题是,除非程序的数据副本是最新的,否则程序无法更新。我们是否应该在更新之前阅读,并希望更新发生在其他人更改数据之前?

首选的设计模式是使用ExecuteOnQuery方法实现SQL更新;并尽可能使用参数化SQL

    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。你提供的链接证实了我当时的想法。