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 .NET Visual Basic:
cb.DataAdapter = Nothing
Los comandos que agregue a DataAdapter se eliminarán y recibirá 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
CommandBuilderDataSet. - 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 el comportamiento
Cree un nuevo proyecto de aplicación de .NET Windows 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.SqlClientAgregue el código siguiente al
Clickevento 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 la cadena de conexión según corresponda para su entorno.
Presione F5 para compilar y ejecutar la aplicación.