ConflictOption

Предоставляет или устанавливает значение типа ConflictOption, которое используется объектом DbCommandBuilder.

Декларация
public virtual ConflictOption ConflictOption {get; set;};

Допустимые значения свойства ConflictOption приведены в таблице 36.

Таблица 36. Допустимые значения свойства ConflictOption
ЗначениеОписание

CompareAllSearchableValues

(по умолчанию)

Операторы обновления и удаления будут включать все столбцы, по которым может осуществляться поиск (т.е. все столбцы, которые возвращает SelectCommand, будут использованы в опции WHERE запроса UpdateCommand или DeleteCommand) (за исключением BLOB-столбцов). Эквивалентно заданию CompareAllValuesUpdate | CompareAllValuesDelete

CompareRowVersion

Если в таблице имеются какие-либо столбцы типа Timestamp, то они используются в предложении WHERE для всех созданных операторов обновления. Эквивалентно заданию CompareRowVersionUpdate | CompareRowVersionDelete

Примечание

В СУБД ЛИНТЕР столбцы Timestamp отсутствуют, поэтому в предложении WHERE будут использованы только столбцы, входящие в первичный ключ

OverwriteChanges

Все операторы обновления и удаления включают только столбцы с атрибутом PrimaryKey в конструкции WHERE. Если не определен ни один столбец с атрибутом PrimaryKey, то все столбцы, по которым может осуществляться поиск, будут включены в предложение WHERE. Это эквивалентно OverwriteChangesUpdate | OverwriteChangesDelete


Значение свойства

Значение типа ConflictOption.

Исключения
ArgumentOutOfRangeException Недопустимое значение свойства.
Пример
// C#
using System;
using System.Data;
using System.Data.Common;

class CommandBuilderSample
{
  static void Main()
  {
    // Создание фабрики классов провайдера
    DbProviderFactory factory =
      DbProviderFactories.GetFactory("System.Data.LinterClient");
    // Соединение с БД
    DbConnection con = factory.CreateConnection();
    con.ConnectionString = "DataSource=LOCAL;UserID=SYSTEM;Password=MANAGER8";
    con.Open();
    DbCommand cmd = factory.CreateCommand();
    cmd.CommandText = "SELECT MODEL, PERSONID FROM AUTO;";
    cmd.Connection = con;
    DbDataAdapter adapter = factory.CreateDataAdapter();
    adapter.SelectCommand = cmd;
    // Связывание объектов DbDataAdapter и DbCommandBuilder
    DbCommandBuilder builder = factory.CreateCommandBuilder();
    builder.DataAdapter = adapter;
    // ConflictOption.CompareAllSearchableValues
    builder.ConflictOption = ConflictOption.CompareAllSearchableValues;
    Console.WriteLine(builder.ConflictOption);
    Console.WriteLine(cmd.CommandText);
    Console.WriteLine(builder.GetUpdateCommand().CommandText);
    Console.WriteLine();
    // ConflictOption.CompareRowVersion
    builder.ConflictOption = ConflictOption.CompareRowVersion;
    builder.RefreshSchema();
    Console.WriteLine(builder.ConflictOption);
    Console.WriteLine(cmd.CommandText);
    Console.WriteLine(builder.GetUpdateCommand().CommandText);
    Console.WriteLine();
    // ConflictOption.OverwriteChanges
    builder.ConflictOption = ConflictOption.OverwriteChanges;
    builder.RefreshSchema();
    Console.WriteLine(builder.ConflictOption);
    Console.WriteLine(cmd.CommandText);
    Console.WriteLine(builder.GetUpdateCommand().CommandText);
    Console.WriteLine();
    // Изменение свойства SelectCommand
    cmd.CommandText = "SELECT MODEL, MAKE, PERSONID FROM AUTO;";
    // Обновление схемы
    builder.RefreshSchema();
    Console.WriteLine(builder.ConflictOption);
    Console.WriteLine(cmd.CommandText);
    Console.WriteLine(builder.GetUpdateCommand().CommandText);
    Console.WriteLine();
    // Освобождение ресурсов
    builder.Dispose();
    // Закрытие подключения к БД
    con.Close();
  }
}

Результат выполнения примера:

CompareAllSearchableValues
SELECT MODEL, PERSONID FROM AUTO;
UPDATE "SYSTEM"."AUTO" SET "MODEL" = :ret1, "PERSONID" = :ret2 WHERE (((:ret3 = 1 AND "MODEL"
IS NULL) OR ("MODEL" = :ret4)) AND ("PERSONID" = :ret5))

CompareRowVersion
SELECT MODEL, PERSONID FROM AUTO;
UPDATE "SYSTEM"."AUTO" SET "MODEL" = :ret1, "PERSONID" = :ret2 WHERE (("PERSONID" = :ret3))

OverwriteChanges
SELECT MODEL, PERSONID FROM AUTO;
UPDATE "SYSTEM"."AUTO" SET "MODEL" = :ret1, "PERSONID" = :ret2 WHERE (("PERSONID" = :ret3))

OverwriteChanges
SELECT MODEL, MAKE, PERSONID FROM AUTO;
UPDATE "SYSTEM"."AUTO" SET "MODEL" = :ret1, "MAKE" = :ret2, "PERSONID" = :ret3
WHERE (("PERSONID" = :ret4))