Рассмотрим этот простой SP:
create proc Updater
@id int,
@name varchar(25),
@rowversion timestamp
as
begin
update FOO
set name=@name
where id = @id and rowversion = @rowversion;
if @@rowcount > 0
select @rowversion = rowversion
from FOO where id = @id;
end
Если кто-то еще отредактировал строку после того, как она была прочитана клиентским приложением, это обновление (преднамеренно) завершится ошибкой, поскольку отметка времени, используемая клиентским приложением, устарела.
Вопрос к экспертам ADO.NET: Должен ли параметр @rowversion быть объявлен OUTPUT
в SP, чтобы через команду UpdateCommand dataAdapter возвращалась последняя метка времени? Или направление параметра IN на стороне сервера по умолчанию вернет значение, если для направления ADO.NET установлено значение ParameterDirection.InputOutput
?
См. эту документацию по RowUpdating:
"Если есть выходные параметры, они помещаются в DataRow."
Что именно означает этот документ ADO.NET под «выходными параметрами»? Речь идет об определении параметра ADO.NET, или об определении на стороне сервера, или о том и другом?
Я не хочу полагаться на результаты своих проб и ошибок, поскольку поведение, которое я вижу, может быть результатом какого-то усложняющего фактора, который я еще не определил.
SP
вернуть 0 или 1 - person Ilyes   schedule 24.04.2017