System.NullReferenceException tritt auf, wenn Sie das CommandBuilder-Objekt verwenden.

Dieser Artikel hilft Ihnen, die System.NullReferenceException Ausnahme zu beheben, die auftritt, wenn Sie das CommandBuilder -Objekt verwenden.

Ursprüngliche Produktversion: Visual Basic .NET
Ursprüngliche KB-Nummer: 310367

Symptome

Wenn Sie das CommandBuilder -Objekt verwenden, um explizit Befehle für das DataAdapter Objekt wie folgt abzurufen:

da.InsertCommand = cb.GetInsertCommand

Führen Sie dann den folgenden Visual Basic .NET-Code aus:

cb.DataAdapter = Nothing

Die Befehle, die Sie dem DataAdapter hinzufügen, werden gelöscht, und Sie erhalten die folgende Fehlermeldung:

Eine nicht behandelte Ausnahme vom Typ "System.NullReferenceException" ist in app_name.exe
Zusätzliche Informationen: Der Objektverweis ist nicht auf eine instance eines Objekts festgelegt.

Ursache

CommandBuilder löscht die Befehle, die generiert werden, wenn die Zuordnung zu einem DataAdapter.CommandBuilder getrennt wird und DataAdapter verknüpft sind. Wenn sie nicht verknüpft oder nicht zugeordnet werden, werden die Befehle mit NULL versehen. Dieses Problem wirkt sich nicht auf Befehle aus, die Sie von Anfang an erstellen.

Lösung

Verwenden Sie eine der folgenden Methoden, um dieses Problem zu beheben:

  • Trennen Sie die CommandBuilder Zuordnung von nicht von DataSet.
  • Erstellen Sie die Befehle selbst, entweder im Code oder über Visual Data Tools.

Status

Es handelt sich hierbei um ein beabsichtigtes Verhalten.

Schritte zum Reproduzieren des Verhaltens

  1. Erstellen Sie ein neues Visual Basic .NET-Windows-Anwendungsprojekt. Form1 wird dem Projekt standardmäßig hinzugefügt.

  2. Hinzufügen eines Schaltflächen-Steuerelements zu Form1.

  3. Wechseln Sie zur Codeansicht, und fügen Sie oben im Codefenster den folgenden Code hinzu:

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    
  4. Fügen Sie dem -Ereignis der Schaltfläche den Click folgenden Code hinzu:

    Dim con As New SqlConnection("server=myserver;uid=sa;pwd=mypassword;" & _
                                "database=northwind")
    Dim da As New SqlDataAdapter("Select * From Customers", con)
    Dim cb As New SqlCommandBuilder(da)
    Dim cmdInsert As New SqlCommand( _
            "Insert Into Customer (CustomerID) Value ('AAAAA')", con)
    da.InsertCommand = cmdInsert
    da.UpdateCommand = cb.GetUpdateCommand
    da.DeleteCommand = cb.GetDeleteCommand
    Debug.WriteLine(da.InsertCommand.CommandText)
    Debug.WriteLine(da.DeleteCommand.CommandText)
    cb.DataAdapter = Nothing ' Comment out this line to avoid the error.
    cb = Nothing
    Debug.WriteLine(da.InsertCommand.CommandText)
    Debug.WriteLine(da.DeleteCommand.CommandText)'Error occurs here.
    
  5. Ändern Sie Ihre Verbindungszeichenfolge entsprechend Ihrer Umgebung.

  6. Drücken Sie F5, um die Anwendung zu kompilieren und auszuführen.