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.
Originalversion des Produkts: Visual Basic .NET
Ursprüngliche KB-Nummer: 310367
Problembeschreibung
Wenn Sie das CommandBuilder Objekt zum expliziten Abrufen von Befehlen für das DataAdapter Objekt wie folgt verwenden:
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 unbehandelte Ausnahme vom Typ "System.NullReferenceException" ist in app_name.exe
Zusätzliche Informationen: Der Objektbezug ist nicht auf eine Instanz eines Objekts festgelegt.
Ursache
CommandBuilder löscht die Befehle, die generiert werden, wenn sie von einem DataAdapter.CommandBuilder aufgehoben werden und DataAdapter verknüpft sind. Wenn sie nicht verknüpft oder nicht verknüpft sind, werden die Befehle nulliert. 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 nicht die Zuordnung von der
CommandBuilderDataSet. - Erstellen Sie die Befehle selbst, entweder im Code oder mithilfe von Visual Data Tools.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Schritte zum Reproduzieren des Verhaltens
Erstellen Sie ein neues Visual Basic .NET Windows Application-Projekt. Form1 wird dem Projekt standardmäßig hinzugefügt.
Fügen Sie formular1 ein Schaltflächensteuerelement hinzu.
Wechseln Sie zur Codeansicht, und fügen Sie oben im Codefenster den folgenden Code hinzu:
Imports System.Data.OleDb Imports System.Data.SqlClientFügen Sie dem
ClickEreignis der Schaltfläche den 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.Ändern Sie die Verbindungszeichenfolge entsprechend ihrer Umgebung.
Drücken Sie F5, um die Anwendung zu kompilieren und auszuführen.