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();
  }
}