Help and Support

Id. de artículo: 310373 - Última revisión: domingo, 13 de mayo de 2007 - Versión: 2.7

El método DataAdapter.Fill no establece todas las propiedades de los objetos DataTable y DataColumn

Este artículo hace referencia al siguiente espacio de nombres de la Biblioteca de clases de Microsoft .NET Framework:
  • System.Data

En esta página

Expandir todo | Contraer todo

Síntomas

Después de utilizar el método DataAdapter.Fill , no se establecen varias propiedades de la DataTable y objetos de DataColumn (tales como claves principales, campos de incremento automático, los campos que aceptan valores NULL, índices únicos y así sucesivamente).

Causa

De forma predeterminada, el objeto DataAdapter está optimizado para escenarios de sólo lectura. El método Fill sólo recupera la cantidad de esquema que es necesario para mostrar los datos. Deberá realizar pasos adicionales para obtener el esquema adicional que son necesarios para actualizar o validar un objeto.

Solución

Para obtener información adicional sobre el objeto DataSet , utilice uno de los métodos siguientes:
  • Llame al método DataAdapter.FillSchema para obtener información de esquema extendido.
  • Establecer se haya dado el valor MissingSchemaAction.AddWithKey a DataAdapter.MissingSchemaAction antes de llamar al método Fill .
Para obtener información adicional acerca de cuándo utilizar el método FillSchema y MissingSchemaAction propiedad, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
310128  (http://support.microsoft.com/kb/310128/ ) Cuándo utilizar FillSchema y MissingSchemaAction

Más información

Pasos para reproducir el comportamiento

  1. Inicie Microsoft Visual Studio NET..
  2. Abra un nuevo proyecto de aplicación para Windows en Visual Basic .NET. Form1 se agrega al proyecto de manera predeterminada.
  3. Asegúrese de que el proyecto contiene una referencia al espacio de nombres System.Data .
  4. Coloque un control Button y un control DataGrid en Form1.
  5. Cambie la propiedad Name del botón a btnTest y la propiedad Text a prueba .
  6. Utilice la instrucción Imports de los espacios de nombres System y System.Data de para que no se pida calificar declaraciones en esos espacios de nombres más adelante en el código. Agregue el código siguiente a la sección "General Declarations" de Form1:
    Imports System
    Imports System.Data.OleDb
    Imports System.Data.SqlClient
    					
  7. Agregue el código siguiente en la ventana después de la región "Código generado por el Diseñador de Windows Forms":
        Private Sub btnTest_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles btnTest.Click
            Dim myConnString As String = _
                    "User ID=sa;password=sa;Initial Catalog=Northwind;Data Source=myServer"
            Dim ds As New DataSet()
            Dim con As New SqlConnection(myConnString)
            Dim daCust As New SqlDataAdapter("Select * From Customers", con)
            'Uncomment either of the following two lines to obtain additional schema information.
            'daCust.MissingSchemaAction = MissingSchemaAction.AddWithKey
            'daCust.FillSchema(ds, SchemaType.Source, "Cust")
            daCust.Fill(ds, "Cust")
    
            DataGrid1.DataSource = ds
            DataGrid1.DataMember = "Cust"
    
            Dim colArr() As DataColumn
            colArr = ds.Tables(0).PrimaryKey
            If colArr.Length.ToString() = 0 Then
                MessageBox.Show("No Primary Key is defined.")
            End If
    
            Dim i As Integer
            For i = 0 To colArr.GetUpperBound(0)
                MessageBox.Show("Primary Key : " & colArr(i).ColumnName)
            Next i
        End Sub
    					
  8. Modifique la cadena de conexión ( myConnString ) según corresponda para su entorno.
  9. Guardar el proyecto. En el menú Depurar , haga clic en iniciar para ejecutar el proyecto.
  10. Haga clic en prueba . Observe que no se puede recuperar la información de clave principal de la tabla.
  11. Quite comentario el código para establecer MissingSchemaAction o utilizar FillSchema y haga clic nuevo prueba . Observe que la información de clave principal se recupera correctamente.

Referencias

Para obtener más información acerca de los objetos de ADO.NET y su sintaxis, consulte la siguiente documentación del Kit de desarrollo de software (SDK) de Microsoft .NET Framework o MSDN Online:
Acceso a datos con ADO.NET
http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx (http://msdn2.microsoft.com/en-us/library/e80y5yhx(vs.71).aspx)

La información de este artículo se refiere a:
  • Microsoft ADO.NET 2.0
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
Palabras clave: 
kbmt kbtshoot kbprb kbsqlclient kbsystemdata KB310373 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): 310373  (http://support.microsoft.com/kb/310373/en-us/ )

Seleccione idioma