Id. de artículo: 310376 - Última revisión: miércoles, 16 de mayo de 2007 - Versión: 2.2

INFORMACIÓN: Excepciones que se desencadenan por el método Update del DataAdapter con objetos de null

Nota acerca de su sistema operativoEste artículo se aplica a un sistema operativo distinto al que usa. El contenido del artículo que puede que no sea importante para usted, se deshabilitará
Este artículo hace referencia al siguiente espacio de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Data.SqlClient

En esta página

Expandir todo | Contraer todo

Resumen

Este artículo enumeran las excepciones que se pueden producir cuando se invoca el método Update de un objeto DataAdapter para actualizar un objeto DataSet o un objeto DataTable . Estas excepciones se producen si el DataSet , DataTable o la propiedad UpdateCommand es Nothing o null .

Más información

  • Si el objeto DataSet que se desea actualizar es Nothing o null , recibirá la excepción siguiente (o similar):
    Error de excepción no controlada del tipo 'System.ArgumentNullException' en system.data.dll

    Obtener información adicional: valor no puede ser null.
    Para resolver este problema, asegúrese de que el DataSet que desea actualizar no es Nothing o null antes de pasar al método Update de DataAdapter .
  • Si el objeto DataTable que desea actualizar es Nothing o null , recibirá la excepción siguiente (o similar):
    Excepción no controlada del tipo 'System.InvalidOperationException' en system.data.dll

    Obtener información adicional: actualizar no se puede encontrar TableMapping ['cliente'] o DataTable 'Cliente'.
    donde 'Cliente' representa un nombre de DataTable .

    Como alternativa, puede recibir la siguiente excepción (o similar):
    Excepción no controlada del tipo 'System.InvalidOperationException' en system.data.dll

    Obtener información adicional: actualizar no se puede encontrar TableMapping ['tabla'] o DataTable 'Tabla'.
    Para resolver este problema, asegúrese de que la DataTable que desea actualizar no es Nothing o null antes de pasar al método Update de DataAdapter .
  • Si el DataAdapter no tiene un InsertCommand , un UpdateCommand o una propiedad DeleteCommand , recibirá la excepción siguiente o uno similar:
    Excepción no controlada del tipo 'System.InvalidOperationException' en system.data.dll

    Obtener información adicional: Update requiere un UpdateCommand válido cuando se pasa colección DataRow con filas modificadas
    Para resolver este problema, asegúrese de que el DataAdapter tiene un válido UpdateCommand . Para crear un UpdateCommand , un InsertCommand y un DeleteCommand para un DataAdapter , utilice uno de los métodos siguientes:
    • Escribir los comandos manualmente.
    • Utilizar el objeto CommandBuilder para generar los comandos dinámicamente en tiempo de ejecución.
    • Utilice las herramientas de datos visuales para escribir los comandos en tiempo de diseño.

Pasos para reproducir el comportamiento

Generar el ejemplo de Visual Basic .NET

Este ejemplo utiliza la base de datos Neptuno que acompaña a Microsoft SQL Server.
  1. Inicie Microsoft Visual Studio NET.. Abra un nuevo proyecto de aplicación para Windows en Visual Basic .NET. Form1 se agrega al proyecto de manera predeterminada.
  2. Agregue tres controles Button a Form1. Button1 , Button2 y Button3 se agregan de manera predeterminada.
  3. Haga doble clic en Form1 para abrir la ventana código de Form1. Agregue el código siguiente a la parte superior de la ventana código de Form1, encima de la declaración "Public Class Form1":
    Imports System.Data
    Imports System.Data.SqlClient
    					
  4. Agregue el código siguiente a la ventana código de Form1, después de la sección "Código generado por el Diseñador de Windows Forms":
    Private Sub Button1_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click
        MsgBox("Attempting to update a DataSet that is Nothing...")
        Dim cn As New SqlConnection("Server=SQLServerName;" & _
                                    "integrated security=true;database=northwind")
        Dim da As New SqlDataAdapter("Select * From Customers", cn)
        Dim cb As New SqlCommandBuilder(da)
        Dim ds As New DataSet()
    
        da.Fill(ds, "Cust")
        'Uncomment the following line of code to resolve this problem.
        'ds.Tables(0).Rows(0)!Region = "WA"
        'Without the above line, ds.GetChanges() does not return a DataSet
        'because no Rows are modified.
        Dim ds2 As DataSet = ds.GetChanges()
        da.Update(ds2, "Cust")
    
        cn.Close()
        cn = Nothing
    End Sub
    
    Private Sub Button2_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button2.Click
        MsgBox("Attempting to update a DataTable that is Nothing...")
        Dim cn As New SqlConnection("Server=SQLServerName;" & _
                                    "integrated security=true;database=northwind")
        Dim da As New SqlDataAdapter("Select * From Customers", cn)
        Dim cb As New SqlCommandBuilder(da)
        Dim ds As New DataSet()
    
        da.Fill(ds, "Cust")
        ds.Tables(0).Rows(0)!Region = "WA"
        da.Update(ds, "NonExistentDataTable")
        'Comment the above line of code, and uncomment the following line
        'of code to resolve this problem.
        'da.Update(ds, "Cust")
    
        cn.Close()
        cn = Nothing
    End Sub
    
    Private Sub Button3_Click(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button3.Click
        MsgBox("Attempting to update without UpdateCommand...")
    
        Dim cn As New SqlConnection("Server=SQLServerName;" & _
                                    "integrated security=true;database=northwind")
        Dim da As New SqlDataAdapter("Select * From Customers", cn)
        'Uncomment the following line of code to resolve this problem.
        'Dim cb As New SqlCommandBuilder(da)
    
        Dim ds As New DataSet()
        da.Fill(ds, "Cust")
        ds.Tables(0).Rows(0)!Region = "WA"
        da.Update(ds, "Cust")
    
        cn.Close()
        cn = Nothing
    End Sub
    					
  5. En cada procedimiento de evento Button_Click , modifique el código siguiente que corresponda a conectarse al equipo que ejecuta SQL Server:
        Dim cn As New SqlConnection("Server=SQLServerName;" & _
                                    "integrated security=true;database=northwind")
    					

Primera excepción: El DataSet es Nothing o null

  1. Presione la tecla F5 para generar y ejecutar el proyecto.
  2. Haga clic en Button1 . Aparecerá la excepción siguiente:
    Error de excepción no controlada del tipo 'System.ArgumentNullException' en system.data.dll

    Obtener información adicional: valor no puede ser null.
    Esta excepción se produce porque no hay filas se modifican en la tabla Cust de ds DataSet . Por tanto, ds.GetChanges no devuelve un DataSet y ds2 es Nothing .
  3. Haga clic en salto para volver al código fuente y, a continuación, deje de ejecutarse el código.
  4. En el código de evento Button1_Click , quite comentario el código siguiente:
        'ds.Tables(0).Rows(0)!Region = "WA"
    					
  5. Presione F5 para generar y para ejecutar el proyecto y, a continuación, haga clic en Button1 . Observe que no reciben la excepción.

Excepción de segunda: DataTable es Nothing o null

  1. Presione F5 para generar el proyecto y, a continuación, ejecútelo.
  2. Haga clic en Button2 . Aparecerá la excepción siguiente:
    Excepción no controlada del tipo 'System.InvalidOperationException' en system.data.dll

    Obtener información adicional: actualizar no se puede encontrar TableMapping ['NonExistentDataTable'] o DataTable 'NonExistentDataTable'
    Esta excepción se produce porque 'NonExistentDataTable' no es una DataTable dentro de ds . En este ejemplo, pensado para actualizar 'Cliente'.
  3. Haga clic en salto para volver al código fuente y, a continuación, deje de ejecutarse el código.
  4. En el código de evento Button2_Click , comentario el código siguiente:
        da.Update(ds, "NonExistentDataTable")
    					
    elimine el código siguiente:
        'da.Update(ds, "Cust")
    					
  5. Presione F5 para generar y para ejecutar el proyecto y, a continuación, haga clic en Button2 . Observe que no reciben la excepción.

Excepción del tercer: UpdateCommand de DataAdapter es Nothing o null

  1. Presione F5 para generar el proyecto y, a continuación, ejecútelo.
  2. Haga clic en Button3 . Aparecerá la excepción siguiente:
    Excepción no controlada del tipo 'System.InvalidOperationException' en system.data.dll

    Obtener información adicional: Update requiere un UpdateCommand válido cuando se pasa colección DataRow con filas modificadas.
  3. Haga clic en salto para volver al código fuente y, a continuación, deje de ejecutarse el código.
  4. En el código de eventos Button3_Click , quite comentario el código siguiente:
        'Dim cb As New SqlCommandBuilder(da)
    					
  5. Presione F5 para generar y para ejecutar el proyecto y, a continuación, haga clic en Button3 . Observe que no reciben la excepción.

Referencias

Para obtener más información, consulte los temas siguientes en la documentación de la Ayuda de Visual Studio. NET:
Tutoriales de datos
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vboriDataWalkthroughs.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbcon/html/vboriDataWalkthroughs.asp)

OleDbDataAdapter Class
http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/system.data.oledb.oledbdataadapter(vs.71).aspx)

Clase SqlDataAdapter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlDataAdapterClassTopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlDataAdapterClassTopic.asp)

Clase OleDbCommandBuilder
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOleDbOleDbCommandBuilderClassTopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataOleDbOleDbCommandBuilderClassTopic.asp)

Clase SqlCommandBuilder
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlCommandBuilderClassTopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemDataSqlClientSqlCommandBuilderClassTopic.asp)
Para obtener información adicional, haga clic en los números de artículo correspondientes para verlos en Microsoft Knowledge Base:
308055  (http://support.microsoft.com/kb/308055/EN-US/ ) Cómo: Actualizar una base de datos de SQL Server utilizando el objeto SqlDataAdapter en Visual Basic .NET
313483  (http://support.microsoft.com/kb/313483/EN-US/ ) INFO: Guía para objetos DataAdapter de ADO.NET

La información de este artículo se refiere a:
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft ADO.NET 1.1
Palabras clave: 
kbmt kberrmsg kbinfo kbsqlclient kbsystemdata KB310376 KbMtes
Traducción automáticaTraducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 310376  (http://support.microsoft.com/kb/310376/en-us/ )
Retired KB ArticleRenuncia a responsabilidad de los contenidos de la KB sobre productos a los que ya no se ofrece asistencia alguna
El presente artículo se escribió para productos para los que Microsoft ya no ofrece soporte técnico. Por tanto, el presente artículo se ofrece "tal cual" y no será actualizado.