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.
Статус
Такое поведение является особенностью данного продукта.
Действия по воспроизведению поведения
Создайте проект приложения .NET для .NET для Visual Basic. Форма Form1 добавляется в проект по умолчанию.
Добавьте элемент управления Button в Form1.
Переключитесь в представление "Код" и добавьте следующий код в начало окна Код:
Imports System.Data.OleDb Imports System.Data.SqlClient
Добавьте следующий код в
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.
Измените строка подключения в соответствии с вашей средой.
Нажмите клавишу F5, чтобы скомпилировать и запустить приложение.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по