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 CommandBuilderDataSetdo .
  • 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

  1. Crie um novo projeto do Aplicativo Windows .NET do Visual Basic. O Form1 é adicionado ao projeto por padrão.

  2. Adicione um controle Button ao Form1.

  3. 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
    
  4. 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.
    
  5. Modifique seu cadeia de conexão conforme apropriado para seu ambiente.

  6. Pressione o F5 para compilar e executar o aplicativo.