Freigeben über


SqlCeCommandBuilder-Klasse

Generiert automatisch Befehle für einzelne Tabellen, durch die an einem DataSet vorgenommene Änderungen mit der zugeordneten Datenbank abgeglichen werden. Diese Klasse kann nicht vererbt werden.

Namespace:  System.Data.SqlServerCe
Assembly:  System.Data.SqlServerCe (in System.Data.SqlServerCe.dll)

Syntax

'Declaration
Public NotInheritable Class SqlCeCommandBuilder _
    Inherits DbCommandBuilder
'Usage
Dim instance As SqlCeCommandBuilder
public sealed class SqlCeCommandBuilder : DbCommandBuilder
public ref class SqlCeCommandBuilder sealed : public DbCommandBuilder
[<SealedAttribute>]
type SqlCeCommandBuilder =  
    class
        inherit DbCommandBuilder
    end
public final class SqlCeCommandBuilder extends DbCommandBuilder

Hinweise

Sie können ein SqlCeCommandBuilder-Objekt erstellen, um Transact-SQL-Anweisungen für das Aktualisieren einzelner Tabellen automatisch zu generieren, indem Sie die SelectCommand-Eigenschaft festlegen.

Der SqlCeCommandBuilder registriert sich selbst als ein Listener für RowUpdating-Ereignisse, wenn Sie die DataAdapter-Eigenschaft festlegen. Einem SqlCeDataAdapter-Objekt kann immer nur ein SqlCeCommandBuilder-Objekt gleichzeitig zugeordnet werden und umgekehrt.

Zum Generieren von INSERT-Anweisungen, UPDATE-Anweisungen und DELETE-Anweisungen verwendet die SqlCeCommandBuilder-Klasse die SelectCommand-Eigenschaft, um einen erforderlichen Satz von Metadaten automatisch abzurufen. Wenn Sie die SelectCommand-Eigenschaft nach dem Abrufen der Metadaten ändern (z. B. nach der ersten Aktualisierung), müssen Sie die RefreshSchema()()()()-Methode aufrufen, um die Metadaten zu aktualisieren.

Die SelectCommand-Eigenschaft muss also mindestens einen Primärschlüssel oder eine eindeutige Spalte zurückgeben. Wenn dies nicht der Fall ist, wird eine InvalidOperation-Ausnahme generiert, aber nicht die Befehle.

Die SqlCeCommandBuilder-Klasse verwendet auch die Connection-Eigenschaft und die Transaction-Eigenschaft, auf die durch die SelectCommand-Eigenschaft verwiesen wird. Sie müssen die öffentliche RefreshSchema()()()()-Methode aufrufen, wenn eine dieser Eigenschaften geändert oder die SelectCommand-Eigenschaft selbst ersetzt wird. Andernfalls behalten die Eigenschaften InsertCommand, UpdateCommand und DeleteCommand ihre vorherigen Werte bei.

Wenn Sie die Dispose()()()()-Methode aufrufen, wird die Zuordnung der SqlCeCommandBuilder-Klasse zur SqlCeDataAdapter-Klasse aufgehoben, und die generierten Befehle werden nicht mehr verwendet.

Beispiele

Im folgenden Beispiel wird die SqlCeCommand-Klasse gemeinsam mit der SqlCeDataAdapter-Klasse und der SqlCeConnection-Klasse zum Auswählen von Zeilen aus einer Datenquelle verwendet. Dem Beispiel wird eine Verbindungszeichenfolge, eine Abfragezeichenfolge und ein Zeichenfolge übergeben, die den Namen der Datenbanktabelle darstellt. Anschließend wird im Beispiel eine SqlCeCommandBuilder-Klasse erstellt. Der Befehlsgenerator wird dann vom Datenadapter verwendet, um das geänderte DataSet in der lokalen Datenbank zu aktualisieren.

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

Vererbungshierarchie

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

Threadsicherheit

Any public static (Shared in Microsoft Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Siehe auch

Verweis

SqlCeCommandBuilder-Member

System.Data.SqlServerCe-Namespace