System.NullReferenceException si verifica quando si utilizza l'oggetto CommandBuilder
Questo articolo consente di risolvere l'eccezione System.NullReferenceException
che si verifica quando si usa l'oggetto CommandBuilder
.
Versione originale del prodotto: Visual Basic .NET
Numero KB originale: 310367
Sintomi
Se si usa l'oggetto CommandBuilder
per ottenere in modo esplicito i comandi per l'oggetto DataAdapter
come indicato di seguito:
da.InsertCommand = cb.GetInsertCommand
Eseguire quindi il codice .NET di Visual Basic seguente:
cb.DataAdapter = Nothing
I comandi aggiunti a DataAdapter
vengono eliminati e viene visualizzato il messaggio di errore seguente:
Eccezione non gestita di tipo 'System.NullReferenceException' in app_name.exe
Informazioni aggiuntive: riferimento all'oggetto non impostato su un'istanza di un oggetto.
Causa
CommandBuilder
elimina i comandi generati quando viene disassociato da un DataAdapter.CommandBuilder
oggetto e DataAdapter
sono collegati. Quando vengono scollegati o disassociati, i comandi vengono null. Questo problema non influisce sui comandi compilati dall'inizio.
Risoluzione
Per risolvere il problema, usare uno dei metodi seguenti:
- Non dissociare l'oggetto
CommandBuilder
DataSet
da . - Compilare i comandi manualmente, nel codice o tramite Visual Data Tools.
Stato
Si tratta di un comportamento legato alla progettazione del prodotto.
Passaggi per riprodurre il comportamento
Creare un nuovo progetto applicazione Windows .NET di Visual Basic. Form1 viene aggiunto al progetto per impostazione predefinita.
Aggiungere un controllo Button a Form1.
Passare alla visualizzazione Codice e aggiungere il codice seguente all'inizio della finestra Codice:
Imports System.Data.OleDb Imports System.Data.SqlClient
Aggiungere il codice seguente all'evento
Click
di Button: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.
Modificare il stringa di connessione in base alle esigenze dell'ambiente.
Premere F5 per compilare ed eseguire l'applicazione.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per