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 vonDataSet
. - 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
Erstellen Sie ein neues Visual Basic .NET-Windows-Anwendungsprojekt. Form1 wird dem Projekt standardmäßig hinzugefügt.
Hinzufügen eines Schaltflächen-Steuerelements zu Form1.
Wechseln Sie zur Codeansicht, und fügen Sie oben im Codefenster den folgenden Code hinzu:
Imports System.Data.OleDb Imports System.Data.SqlClient
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.
Ändern Sie Ihre Verbindungszeichenfolge entsprechend Ihrer Umgebung.
Drücken Sie F5, um die Anwendung zu kompilieren und auszuführen.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Tickets als Feedbackmechanismus für Inhalte auslaufen lassen und es durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unter:Feedback senden und anzeigen für