System.NullReferenceException возникает при использовании объекта CommandBuilder

Эта статья поможет устранить System.NullReferenceException исключение, возникающее при использовании CommandBuilder объекта .

Исходная версия продукта: Visual Basic .NET
Исходный номер базы знаний: 310367

Симптомы

Если объект используется CommandBuilder для явного DataAdapter получения команд для объекта следующим образом:

da.InsertCommand = cb.GetInsertCommand

Затем выполните следующий код .NET на Visual Basic:

cb.DataAdapter = Nothing

Команды, добавленные в DataAdapter , удаляются, и появляется следующее сообщение об ошибке:

Необработанное исключение типа System.NullReferenceException произошло в app_name.exe
Дополнительные сведения. Ссылка на объект не задана для экземпляра объекта.

Причина

CommandBuilder удаляет команды, создаваемые при отсоединениях от DataAdapter.CommandBuilder объекта и DataAdapter связанных; если они не связаны или не связаны, команды получают значение NULL. Эта проблема не влияет на команды, которые вы создаете с самого начала.

Разрешение

Чтобы устранить эту проблему, используйте один из следующих методов:

  • Не отсоединяйте CommandBuilder объект от DataSet.
  • Создайте команды самостоятельно в коде или с помощью visual Data Tools.

Статус

Такое поведение является особенностью данного продукта.

Действия по воспроизведению поведения

  1. Создайте проект приложения .NET для .NET для Visual Basic. Форма Form1 добавляется в проект по умолчанию.

  2. Добавьте элемент управления Button в Form1.

  3. Переключитесь в представление "Код" и добавьте следующий код в начало окна Код:

    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    
  4. Добавьте следующий код в Click событие 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.
    
  5. Измените строка подключения в соответствии с вашей средой.

  6. Нажмите клавишу F5, чтобы скомпилировать и запустить приложение.