System.NullReferenceException ocorre quando você usa o objeto CommandBuilder
Este artigo ajuda você a resolve a System.NullReferenceException
exceção que ocorre quando você usa o CommandBuilder
objeto.
Versão original do produto: Visual Basic .NET
Número de KB original: 310367
Sintomas
Se você usar o CommandBuilder
objeto para obter explicitamente comandos para o objeto da DataAdapter
seguinte maneira:
da.InsertCommand = cb.GetInsertCommand
Em seguida, execute o seguinte código .NET do Visual Basic:
cb.DataAdapter = Nothing
Os comandos que você adiciona ao DataAdapter
são excluídos e você recebe a seguinte mensagem de erro:
Uma exceção não tratada do tipo 'System.NullReferenceException' ocorreu em app_name.exe
Informações adicionais: referência de objeto não definida como uma instância de um objeto.
Motivo
CommandBuilder
exclui os comandos gerados quando ele é desassociado de um DataAdapter.CommandBuilder
e DataAdapter
são vinculados; quando eles são desvinculados ou desassociados, os comandos são anulados. Esse problema não afeta os comandos que você cria desde o início.
Resolução
Use um dos seguintes métodos para resolve esse problema:
- Não desassociar o
CommandBuilder
DataSet
do . - Crie os comandos por conta própria, no código ou por meio das Ferramentas de Dados Visuais.
Status
Este é o comportamento padrão.
Etapas para reproduzir o comportamento
Crie um novo projeto do Aplicativo Windows .NET do Visual Basic. O Form1 é adicionado ao projeto por padrão.
Adicione um controle Button ao Form1.
Alterne para a exibição de código e adicione o seguinte código à parte superior da janela Código:
Imports System.Data.OleDb Imports System.Data.SqlClient
Adicione o seguinte código ao
Click
evento do Botão: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.
Modifique seu cadeia de conexão conforme apropriado para seu ambiente.
Pressione o F5 para compilar e executar o aplicativo.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários