Поделиться через


SqlCeCommandBuilder Class

Предоставляет собой средство автоматического формирования команд, распространяющихся на одну таблицу, которые используются для согласования со связанной базой данных изменений, внесенных в DataSet. Этот класс не может быть унаследован.

Пространство имен: System.Data.SqlServerCe
Сборка: System.Data.SqlServerCe (в system.data.sqlserverce.dll)

Синтаксис

'Декларация
Public NotInheritable Class SqlCeCommandBuilder
    Inherits DbCommandBuilder
public sealed class SqlCeCommandBuilder : DbCommandBuilder
public ref class SqlCeCommandBuilder sealed : public DbCommandBuilder
public final class SqlCeCommandBuilder extends DbCommandBuilder
public final class SqlCeCommandBuilder extends DbCommandBuilder

Замечания

Создание SqlCeCommandBuilder позволит автоматически формировать инструкции Transact-SQL для обновлений, распространяющихся на одну таблицу, если будет задано свойство SelectCommand.

Объект SqlCeCommandBuilder сам регистрирует себя в качестве прослушивателя для событий RowUpdating каждый раз после установки свойства DataAdapter. Одновременно друг с другом могут быть связаны только по одному объекту SqlCeDataAdapter и SqlCeCommandBuilder.

При формировании инструкций INSERT, UPDATE и DELETE через SqlCeCommandBuilder для автоматической выборки требуемого набора метаданных применяется свойство SelectCommand. Если значение свойства SelectCommand после выборки метаданных изменено (например, после первого обновления), то необходимо обновить метаданные вызовом метода RefreshSchema.

Свойство SelectCommand должно также возвратить, по крайней мере, один столбец первичного ключа или столбец с атрибутом UNIQUE. Если оба объекта отсутствуют, то создается исключение InvalidOperation и команды не формируются.

Объект SqlCeCommandBuilder содержит также свойства Connection и Transaction, на которые ссылается SelectCommand. Если происходит изменение любого из этих свойств или замена самого SelectCommand, то необходимо вызвать функцию RefreshSchema. В противном случае свойства InsertCommand, UpdateCommand и DeleteCommand сохранят свои предыдущие значения.

При вызове метода Dispose происходит разрыв связи между SqlCeCommandBuilder и SqlCeDataAdapter, а использование сформированных команд прекращается.

Иерархия наследования

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Data.Common.DbCommandBuilder
        System.Data.SqlServerCe.SqlCeCommandBuilder

Пример

В следующем примере показано использование SqlCeCommand, SqlCeDataAdapter и SqlCeConnection для выборки строк из источника данных. В этом примере передается строка соединения, строка запроса и строка, которая представляет собой имя таблицы базы данных. Затем пример создает объект SqlCeCommandBuilder, который используется адаптером обработки данных для обновления измененного набора данных в локальной базе данных.

Try
    Dim conn As New SqlCeConnection("Data Source = MyDatabase.sdf")
    conn.Open()

    Dim cmd As SqlCeCommand = conn.CreateCommand()
    cmd.CommandText = "SELECT * FROM employees"

    Dim adp As New SqlCeDataAdapter(cmd)

    Dim cb As New SqlCeCommandBuilder()
    cb.DataAdapter = adp

    MessageBox.Show(cb.GetUpdateCommand().CommandText)
    MessageBox.Show(cb.GetInsertCommand().CommandText)
    MessageBox.Show(cb.GetDeleteCommand().CommandText)

    Dim ds As New DataSet("test")
    adp.Fill(ds)

    ' Modify the contents of the DataSet
    '
    ds.Tables(0).Rows(0)("First Name") = "Joe"

    adp.Update(ds)

Catch e1 As Exception
    Console.WriteLine(e1.ToString())
End Try
try
{
    SqlCeConnection conn = new SqlCeConnection("Data Source = MyDatabase.sdf");
    conn.Open();

    SqlCeCommand cmd = conn.CreateCommand();
    cmd.CommandText = "SELECT * FROM employees";

    SqlCeDataAdapter adp = new SqlCeDataAdapter(cmd);

    SqlCeCommandBuilder cb = new SqlCeCommandBuilder();
    cb.DataAdapter = adp;

    MessageBox.Show(cb.GetUpdateCommand().CommandText);
    MessageBox.Show(cb.GetInsertCommand().CommandText);
    MessageBox.Show(cb.GetDeleteCommand().CommandText);

    DataSet ds = new DataSet("test");
    adp.Fill(ds);

    // Modify the contents of the DataSet
    //
    ds.Tables[0].Rows[0]["First Name"] = "Joe";

    adp.Update(ds);

}
catch (Exception e1)
{
    Console.WriteLine(e1.ToString());
}

Многопоточное использование

Все общие статические члены (Shared в Microsoft Visual Basic) этого типа можно использовать в многопоточных операциях. Безопасная многопоточная работа с членами экземпляров типа не гарантируется.

Платформы

Платформы разработки

Windows Vista, Windows Mobile 5.0, Windows XP Professional with Service Pack 2 (SP2), Windows Server 2003, Windows Mobile 2003 for Pocket PC, Windows CE 5.0
Сведения о версии
.NET Framework и NET Compact Framework
Поддерживается в версии 3.5
.NET Framework
Поддерживается в версии 3.0
.NET Compact Framework и .Net Framework
Поддерживается в версии 2.0

См. также

Справочник

SqlCeCommandBuilder Members
System.Data.SqlServerCe Namespace