Это из сгенерированного адаптера данных:
this._adapter.UpdateCommand.CommandText = @"
UPDATE [dbo].[Currency2] SET [cid1] = @cid1, [cid2] = @cid2, [m] = @m
WHERE (([id] = @Original_id)
AND ([cid1] = @Original_cid1)
AND ([cid2] = @Original_cid2)
AND ([m] = @Original_m));
SELECT id, cid1, cid2, m
FROM Currency2
WHERE (cid1 = @cid1) AND (cid2 = @cid2) AND (id = @id)";
Реализует ли предложение where оптимистичный параллелизм в соответствии с его формальным определением?
Мое лучшее предположение состоит в том, что цель SELECT - вернуть количество обновленных строк, но тогда почему он не использует COUNT (*)?
Обновление: вот сгенерированный код UPDATE, который дал мне идеи о SELECT в (2).
public virtual int Update(int cid1, int cid2, decimal m, int Original_id, int Original_cid1, int Original_cid2, decimal Original_m, int id) {
this.Adapter.UpdateCommand.Parameters[0].Value = ((int)(cid1));
this.Adapter.UpdateCommand.Parameters[1].Value = ((int)(cid2));
this.Adapter.UpdateCommand.Parameters[2].Value = ((decimal)(m));
this.Adapter.UpdateCommand.Parameters[3].Value = ((int)(Original_id));
this.Adapter.UpdateCommand.Parameters[4].Value = ((int)(Original_cid1));
this.Adapter.UpdateCommand.Parameters[5].Value = ((int)(Original_cid2));
this.Adapter.UpdateCommand.Parameters[6].Value = ((decimal)(Original_m));
this.Adapter.UpdateCommand.Parameters[7].Value = ((int)(id));
global::System.Data.ConnectionState previousConnectionState = this.Adapter.UpdateCommand.Connection.State;
if (((this.Adapter.UpdateCommand.Connection.State & global::System.Data.ConnectionState.Open)
!= global::System.Data.ConnectionState.Open)) {
this.Adapter.UpdateCommand.Connection.Open();
}
try {
int returnValue = this.Adapter.UpdateCommand.ExecuteNonQuery();
return returnValue;
}
finally {
if ((previousConnectionState == global::System.Data.ConnectionState.Closed)) {
this.Adapter.UpdateCommand.Connection.Close();
}
}
}