Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 objeto CommandBuilder para obtener explícitamente comandos para el objeto DataAdapter de la siguiente manera:
da.InsertCommand = cb.GetInsertCommand
A continuación, ejecute el siguiente código de .NET de Visual Basic:
cb.DataAdapter = Nothing
Los comandos que agregue 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.CommandBuilderDataAdapter están vinculados; cuando están desvinculados o desasociados, los comandos se anulan. Este problema no afecta a los comandos que se compilan desde el principio.
Resolución
Use uno de los métodos siguientes para resolver este problema:
- No desasocie el
CommandBuilderdelDataSet. - Compile los comandos usted mismo, ya sea en código o a través de Visual Data Tools.
Estado
Este comportamiento es por diseño.
Pasos para reproducir el comportamiento
Cree un nuevo proyecto de aplicación windows de .NET de Visual Basic. Form1 se agrega al proyecto de forma predeterminada.
Agregue un control de botón 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 del botón: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.