System.NullReferenceException se produce cuando se usa el objeto CommandBuilder
Este artículo le ayuda a resolver la System.NullReferenceException
excepción que se produce cuando se usa el CommandBuilder
objeto .
Versión original del producto: Visual Basic .NET
Número de KB original: 310367
Síntomas
Si usa el CommandBuilder
objeto para obtener explícitamente comandos para el DataAdapter
objeto como se indica a continuación:
da.InsertCommand = cb.GetInsertCommand
A continuación, ejecute el siguiente código de Visual Basic .NET:
cb.DataAdapter = Nothing
Los comandos que agrega a DataAdapter
se eliminan y recibe el siguiente mensaje de error:
Se produjo una excepción no controlada del tipo "System.NullReferenceException" en app_name.exe
Información adicional: Referencia de objeto no establecida en una instancia de un objeto.
Causa
CommandBuilder
elimina los comandos que genera cuando se desasocia de y DataAdapter.CommandBuilder
DataAdapter
están vinculados; cuando se desvinculan o desasocian, se anulan los comandos. Este problema no afecta a los comandos que se compilan desde el principio.
Solución
Use uno de los métodos siguientes para resolver este problema:
- No desasocie de
CommandBuilder
DataSet
. - Compile los comandos usted mismo, ya sea en código o a través de Visual Data Tools.
Estado
Este comportamiento es una característica del diseño de la aplicación.
Pasos para reproducir este comportamiento
Cree un nuevo proyecto de aplicación de Windows de .NET de Visual Basic. Form1 se agrega al proyecto de forma predeterminada.
Agregue un control Button a Form1.
Cambie a la vista Código y agregue el código siguiente a la parte superior de la ventana Código:
Imports System.Data.OleDb Imports System.Data.SqlClient
Agregue el código siguiente al
Click
evento de 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.
Modifique el cadena de conexión según corresponda para su entorno.
Presione F5 para compilar y ejecutar la aplicación.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de