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