Freigeben über


SqlCommandBuilder-Klasse

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

Namespace: System.Data.SqlClient
Assembly: System.Data (in system.data.dll)

Syntax

'Declaration
Public NotInheritable Class SqlCommandBuilder
    Inherits DbCommandBuilder
'Usage
Dim instance As SqlCommandBuilder
public sealed class SqlCommandBuilder : DbCommandBuilder
public ref class SqlCommandBuilder sealed : public DbCommandBuilder
public final class SqlCommandBuilder extends DbCommandBuilder
public final class SqlCommandBuilder extends DbCommandBuilder

Hinweise

SqlDataAdapter generiert nicht automatisch die Transact-SQL-Anweisungen, die zum Abgleichen von Änderungen an einem DataSet mit der zugeordneten Instanz von SQL Server erforderlich sind. Sie können aber ein SqlCommandBuilder-Objekt erstellen, um Transact-SQL-Anweisungen für das Aktualisieren einzelner Tabellen automatisch zu generieren, indem Sie die SelectCommand-Eigenschaft von SqlDataAdapter festlegen. Anschließend werden alle zusätzlichen, von Ihnen nicht festgelegten Transact-SQL-Anweisungen durch den SqlCommandBuilder generiert.

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

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

SelectCommand 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.

Der SqlCommandBuilder verwendet auch die Connection-Eigenschaft, die CommandTimeout-Eigenschaft und die Transaction-Eigenschaft, auf die durch SelectCommand verwiesen wird. Der Benutzer muss RefreshSchema aufrufen, wenn eine oder mehrere dieser Eigenschaften geändert werden oder SelectCommand selbst ersetzt werden. Andernfalls behalten die InsertCommand-Eigenschaft, die UpdateCommand-Eigenschaft und die DeleteCommand-Eigenschaft ihre vorherigen Werte bei.

Wenn Sie Dispose aufrufen, wird die Zuordnung von SqlCommandBuilder zu SqlDataAdapter aufgehoben, und die generierten Befehle werden nicht mehr verwendet.

Beispiel

Im folgenden Beispiel wird SqlCommand gemeinsam mit SqlDataAdapter und SqlConnection verwendet, um Zeilen aus einer Datenquelle auszuwählen. Im Beispiel wird eine Verbindungszeichenfolge, eine Transact-SQL-SELECT-Anweisung als Abfragezeichenfolge sowie eine Zeichenfolge mit dem Namen der Datenbanktabelle übergeben. Anschließend wird im Beispiel ein SqlCommandBuilder erstellt.

Private Function SelectSqlRows(ByVal connectionString As String, _
    ByVal queryString As String, ByVal tableName As String) As DataSet

    Using connection As New SqlConnection(connectionString)

        Dim adapter As New SqlDataAdapter()
        adapter.SelectCommand = New SqlCommand(queryString, connection)
        Dim builder As SqlCommandBuilder = New SqlCommandBuilder(adapter)

        connection.Open()

        Dim dataSet As DataSet = New DataSet
        adapter.Fill(dataSet, tableName)

        ' Code to modify data in DataSet here 

        ' Without the SqlCommandBuilder this line would fail.
        adapter.Update(dataSet, tableName)

        Return dataSet
    End Using
 End Function
public static DataSet SelectSqlRows(string connectionString,
    string queryString, string tableName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();
        adapter.SelectCommand = new SqlCommand(queryString, connection);
        SqlCommandBuilder builder = new SqlCommandBuilder(adapter);

        connection.Open();

        DataSet dataSet = new DataSet();
        adapter.Fill(dataSet, tableName);

        //code to modify data in DataSet here

        //Without the SqlCommandBuilder this line would fail
        adapter.Update(dataSet, tableName);

        return dataSet;
    }
}

Vererbungshierarchie

System.Object
   System.MarshalByRefObject
     System.ComponentModel.Component
       System.Data.Common.DbCommandBuilder
        System.Data.SqlClient.SqlCommandBuilder

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

SqlCommandBuilder-Member
System.Data.SqlClient-Namespace

Weitere Ressourcen

Verbinden und Abrufen von Daten mit ADO.NET
Verwenden des .NET Framework-Datenanbieters für SQL Server