Как разрешить обновления таблицы базы данных из нескольких программ - PullRequest
0 голосов
/ 18 мая 2011

Поскольку ADO.Net использует «отключенную» модель, в которой данные, доступные для одной программы, являются просто копией того, что находится в базе данных, то каков нормальный способ обработки нескольких программ, нуждающихся в обновлении одной и той же таблицы в базе данных?Проблема, которую я вижу, состоит в том, что программа не может обновить, если его копия данных не является самой последней.Должны ли мы читать перед обновлением и надеемся, что обновление произойдет до того, как кто-то другой изменит данные?

Ответы [ 2 ]

1 голос
/ 18 мая 2011

Я думаю, что наиболее распространенный способ - через оптимистический контроль параллелизма.Этот тип валютного контроля хорошо работает в системах, где конкуренция за одни и те же данные маловероятна.

Оптимистичный параллелизм в ADO.NET (MSDN)

Я обычно реализую Оптимистичный параллелизмУправление с использованием столбца метки времени в SQL Server.Столбец метки времени обновляется новым значением при каждом обновлении строки.Когда вы хотите обновить строку, вы сначала проверяете ее метку времени, чтобы увидеть, соответствует ли она вашей локальной копии.Если оно изменилось, вы обычно сообщаете пользователю, что произошло нарушение параллелизма, и предоставляете какой-то тип разрешения, например, позволяете пользователю решить, какую версию сохранить (локальную версию или версию базы данных).

1 голос
/ 18 мая 2011

Предпочтительным шаблоном проектирования является использование метода ExecuteNonQuery для выполнения SQL UPDATE; и по возможности использовать параметризованный 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: http://dotnetfacts.blogspot.com/2009/01/adonet-command-parameters.html

Кстати, если вы новичок в ADO.NET, но знаете ADO, эта статья MS может быть полезна: http://msdn.microsoft.com/en-us/library/ms973217.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...