SourceVersion
Свойство предоставляет или устанавливает версию столбца, используемую при загрузке свойства Value (текущая или оригинальная версия) в наборе данных DataSet, к которому привязан данный параметр.
Возможные значения свойства:
-
Original
– строка содержит исходные значения. Это свойство не существует для строк со статусом Added; -
Current
– строка содержит текущие значения. Это свойство не существует для строк со статусом Delete; -
Proposed
– строка содержит предложенное значение. Это свойство существует только во время редактирования строки набора данных DataSet, или для строк, не являющихся частью DataRowCollection; -
Default
– версия по умолчанию объектаDataRowState
. Версией по умолчанию для строк со статусом Added, Modified или Unchanged является Current, для строк со статусом Deleted – Original, для строк со статусом Detached – Proposed.
Когда метод AcceptChanges
применяется к объекту DataSet
, DataTable
или DataRow
, то все строки со статусом Deleted удаляются. Оставшиеся строки получают статус Unchanged, и их версии строк Original заменяются на Current.
При вызове метода RejectChanges
удаляются все строки со статусом Added. Оставшиеся строки получают статус Unchanged, и их версии строк Current заменяются на Original.
Значение по умолчанию – current.
Значения DataRowVersion используются при получении значения, найденного в DataRow
с помощью свойства Item или метода GetChildRows
объекта DataRow
.
DataRowVersion сообщает, какая версия объекта DataRow
существует. Версии изменяются в следующих обстоятельствах:
-
после вызова метода
BeginEdit
объектаDataRow
при изменении значения становятся доступны значения Current и Proposed; -
после вызова метода
CancelEdit
объектаDataRow
значение Proposed удаляется; -
после вызова метода
EndEdit
объектаDataRow
значение Proposed становится Current; -
после вызова метода
AcceptChanges
объектаDataRow
значение Original становится идентичным значению Current; -
после вызова метода
AcceptChanges
объектаDataTable
значение Original становится идентичным значению Current; -
после вызова метода
RejectChanges
объектаDataRow
значение Proposed удаляется, и версия получает значение Current.
Примечание
Свойство используется методом UpdateCommand
во время операции Update, чтобы определить, равно ли значение параметра Current или Original (это позволяет обновить первичные ключи).
Декларация
public abstract DataRowVersion SourceVersion {get; set;};
Значение свойства
Объект DataRowVersion
, представляющий версию строки.
Исключения
ArgumentException
| Неизвестное имя версии строки. |
Пример
// C# using System; using System.Data; using System.Data.Common; class ParameterSample { static void Main() { // Создание фабрики классов провайдера DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.LinterClient"); // Соединение с БД DbConnection con = factory.CreateConnection(); con.ConnectionString = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8"; con.Open(); // Создание таблицы DbCommand cmd = factory.CreateCommand(); cmd.Connection = con; cmd.CommandText = "Create Or Replace Table UserInfo " + "(UserID int, UserName Char(256), Age int)"; cmd.ExecuteNonQuery(); // Добавление записи cmd.CommandText = "Insert Into UserInfo " + "(UserID, UserName, Age) Values (1, 'Administrator', 25)"; cmd.ExecuteNonQuery(); // Создание параметра для старого значения столбца UserID DbParameter paramOldUserID = factory.CreateParameter(); paramOldUserID.SourceColumn = "UserID"; paramOldUserID.ParameterName = ":OldUserID"; paramOldUserID.DbType = DbType.Int32; paramOldUserID.SourceVersion = DataRowVersion.Original; // Создание параметра для нового значения столбца UserID DbParameter paramUserID = factory.CreateParameter(); paramUserID.SourceColumn = "UserID"; paramUserID.ParameterName = ":UserID"; paramUserID.DbType = DbType.Int32; paramUserID.SourceVersion = DataRowVersion.Current; // Создание параметра для столбца UserName DbParameter paramUserName = factory.CreateParameter(); paramUserName.SourceColumn = "UserName"; paramUserName.ParameterName = ":UserName"; paramUserName.DbType = DbType.String; // Создание параметра для столбца Age DbParameter paramAge = factory.CreateParameter(); paramAge.SourceColumn = "Age"; paramAge.ParameterName = ":Age"; paramAge.DbType = DbType.Int32; // Создание команды для выборки данных из таблицы DbCommand selectCommand = factory.CreateCommand(); selectCommand.CommandText = "Select * From UserInfo"; selectCommand.Connection = con; // Создание команды для обновления данных в таблице DbCommand updateCommand = factory.CreateCommand(); updateCommand.CommandText = "Update UserInfo " + "Set UserID=:UserID, UserName=:UserName, Age=:Age " + "Where UserID=:OldUserID"; updateCommand.Connection = con; updateCommand.Parameters.Add(paramOldUserID); updateCommand.Parameters.Add(paramUserID); updateCommand.Parameters.Add(paramUserName); updateCommand.Parameters.Add(paramAge); // Создание объекта DataAdapter DbDataAdapter dataAdapter = factory.CreateDataAdapter(); dataAdapter.SelectCommand = selectCommand; dataAdapter.UpdateCommand = updateCommand; // Создание объекта DataSet и получение данных из БД DataSet ds = new DataSet("UserInfo"); dataAdapter.Fill(ds); // Изменение объекта DataSet DataRow dataRow = ds.Tables[0].Rows[0]; dataRow["UserID"] = 2; dataRow["UserName"] = "New Administrator"; dataRow["Age"] = 50; // Синхронизация объекта DataSet с БД try { int rowsUpdated = dataAdapter.Update(ds); Console.WriteLine("Обработано строк: " + rowsUpdated); } catch (Exception ex) { Console.WriteLine("При обновлении БД возникла ошибка: "); Console.WriteLine(ex.Message); } // Освобождение ресурсов con.Close(); } }