Набор данных оптимистичного параллелизма - PullRequest
1 голос
/ 07 ноября 2011

Что мне нужно сделать в моем клиенте набора данных C # для обработки оптимистичного параллелизма?

Эта статья не содержит подробностей, за исключением использования метки времени

Ответы [ 3 ]

1 голос
/ 08 ноября 2011

Эта статья не содержит подробностей, кроме использования метки времени

Это не совсем правильно, в статье просто упоминаются временные метки (вариант использования в первой половине или в статье), а в качестве альтернативы приводятся дополнительные сведения о второй реализации оптимистической блокировки -

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

Магию выполняет следующее утверждение:

UPDATE Table1 Set Col1 = @NewCol1Value,
          Set Col2 = @NewCol2Value,
          Set Col3 = @NewCol3Value
WHERE Col1 = @OldCol1Value AND
    Col2 = @OldCol2Value AND
    Col3 = @OldCol3Value

Так что вы просто прослушали бы событие RowUpdated, и если RecordsAffected равно нулю, то случилось что-то плохое.

Реализация на основе меток времени также довольно очевидна. У вас будет свидание с вашим набором данных:

class OptLockDataSet { 
    DataSet _data;
    DateTime LastUpdate {
        return _data.Tables["ChangeTracker"][0][0];//just for example :)
    }
}

Для обновления у вас есть два пути - явный, когда вы проверяете метки времени даже перед попыткой что-либо сохранить:

if(GetLastUpdateFromDB(_data) > LastUpdate ) {
    //This means that last update was changed because someone else
    //modified the data.
    //Show error to user and reload data from db.
}

Или неявный, как второй способ, описанный в статье - попробуйте обновить, используя отметку времени как условие:

update data set @col1 = @val1 where last_update = @last_update

и если обновляется ноль строк, вы узнаете об исключении параллелизма и соответственно отчитаетесь.

0 голосов
/ 07 ноября 2011

Что мне нужно сделать в моем клиенте набора данных C # для обработки оптимистичного параллелизма?

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

Наборы данных вообще не связаны с взаимодействием с базой данных.

0 голосов
/ 07 ноября 2011

Предполагая, что вы справитесь со всем этим самостоятельно.

Если временная метка, которую вы извлекли из БД, изначально меньше, чем временная метка, которая в настоящее время сохраняется на объекте, тогда кто-то еще сохранил данные, и вы не должны позволять текущему пользователю сохранять или, по крайней мере, предлагать ему перезаписать изменения.

Без более подробного вопроса, я не знаю, что еще сказать.

...