Cómo llenar un objeto DataSet desde una base de datos mediante Visual C++ .NET o Visual C++ 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 818779 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se describe cómo llenar un DataSet objeto con los resultados de uno o más consultas de base de datos y, a continuación, cómo tener acceso a los datos después de carga la consulta en el objeto DataSet. Los objetos DataSet son objetos en memoria que pueden contener tablas, vistas y relaciones que forman una parte clave de acceso a datos en Microsoft .NET Framework.


Más información

Requisitos

Continuación se enumeran el hardware, software, infraestructura de red y service packs que debe tener:
  • Microsoft Windows 2000 Professional, Microsoft Windows 2000 Server, Microsoft Windows 2000 Advanced Server o Microsoft Windows NT 4.0 Server
  • Microsoft SQL Server 7.0, Microsoft SQL Server 2000 o Microsoft Data Engine con la base de datos de ejemplo Pubs instalada
  • Microsoft Visual Studio .NET o Microsoft Visual Studio 2005
En este artículo se supone que está familiarizado con los temas siguientes:
  • Terminología de base de datos
  • Microsoft SQL Server


Llenar un DataSet

Mediante una variedad de objetos en el espacio de nombres System.Data, puede conectarse a un servidor de base de datos, ejecutar una consulta y, a continuación, han colocado los resultados en un objeto DataSet. El DataSet es un objeto desconectado. Por lo tanto, después de cargan los datos, la conexión a la base de datos ya no se utiliza hasta que desea cargar más datos o actualizar el servidor con los cambios realizados en la copia en memoria de la información.

Para cargar datos desde una base de datos a un conjunto de datos, siga estos pasos:
  1. Inicie Visual Studio .NET o Visual Studio 2005.
  2. Cree una nueva aplicación de C++ administrado en Visual C++ .NET 2002, o cree una nueva aplicación de consola en Visual C++ .NET 2003 o crear una nueva aplicación de consola CLR en Visual C++ 2005. Nombre del proyecto MyApplication y, a continuación, haga clic en Aceptar .
  3. Agregue el código siguiente a la MyApplication.cpp archivo.

    Esto agrega una referencia para el espacio de nombres System.Dll, el espacio de nombres System.XML y el espacio de nombres System.Data.
    #using <System.Dll>
    #using <System.Data.Dll>
    #using <System.Xml.Dll>
    
  4. Utilice la instrucción USING en el espacio de nombres System, el espacio de nombres System.Data, el espacio de nombres System.XML, el espacio de nombres System.Collections y el espacio de nombres System.Data.SqlClient para que no tengan que calificar las declaraciones de estos espacios de nombres más adelante en el código. Debe utilizar estas instrucciones antes de cualquier otras declaraciones
    using namespace System;
    using namespace System::Data;
    using namespace System::Xml;
    using namespace System::Collections;
    using namespace System::Data::SqlClient;
    
  5. Mover los datos de la base de datos al DataSet.

    Para ello, debe establecer una conexión de base de datos. Esto requiere un objeto System.Data.SqlClient.SqlCommand y una cadena de conexión. La cadena de conexión en el código conecta a un equipo que ejecuta SQL Server que se encuentra en el equipo local (el equipo donde se ejecuta el código). Debe modificar esta cadena de conexión según corresponda para su entorno. Una vez creado el objeto SqlConnection, llame al método Open de dicho objeto para establecer el vínculo de base de datos real.
    SqlConnection* objConn;
    String* sConnectionString;
    sConnectionString = "Password=myPassword;User ID=myUserID;Initial Catalog=pubs;Data Source=(local)";
    
    objConn = new SqlConnection(sConnectionString);
    objConn->Open();
    
  6. Crear un objeto DataAdapter que representa el vínculo entre la base de datos y el objeto DataSet. Puede especificar SQL Server u otro tipo de comando que se utiliza para recuperar datos como parte del objeto constructor de DataAdapter. El siguiente ejemplo utiliza SQL instrucción que recupera registros de la tabla authors de la base de datos pubs .
    SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
    
  7. Declarar y, a continuación, cree una instancia de un DataSet objeto.

    Al hacerlo, debe proporcionar un nombre para el DataSet todo antes de empezar cargar los datos. El nombre puede contener varias tablas distintas.
    DataSet* dsPubs = new DataSet("Pubs");
  8. Ejecutar FillSchema seguido de Rellenar al controlar la carga de datos.

    La clase SqlDataAdapter proporciona dos métodos, el método Fill y el método FillSchema , que son cruciales para cargar estos datos. Ambos métodos cargar la información a un conjunto de datos. El método Fill carga los datos y el método FillSchema carga todos los metadatos disponibles acerca de una tabla determinada (como nombres de columna, claves principales y restricciones).
    daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
    daAuthors->Fill(dsPubs,"Authors");
    

    Si sólo utiliza Fill , sólo puede cargar los metadatos básicos que debe tener para describir los nombres de columna y los tipos de datos. El método Fill no carga la información de clave principal. Para cambiar este comportamiento predeterminado, puede establecer la propiedad MissingSchemaAction del objeto DataAdapter MissingSchemaAction.AddWithKey a DataAdapter.MissingSchemaAction. Esto carga los metadatos de clave principal junto con la información predeterminada.
    daAuthors->MissingSchemaAction = MissingSchemaAction::AddWithKey;
    daAuthors->Fill(dsPubs,"Authors");
    
    los datos ahora están disponibles como un objeto DataTable individual en la colección Tables del DataSet. Si especifica un nombre de tabla en las llamadas a FillSchema y a Rellenar , puede utilizar ese nombre para tener acceso a la tabla concreta que necesita.
    DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
    
  9. Utilice la función GetEnumerator para tener acceso a los objetos DataRow de la colección Rows de DataTable. Utilice bucle while para iterar en cada fila de la tabla. Puede obtener acceso a las columnas por nombre o por índice posicional. Cero (0) es la primera posición de columna. iEnum
    IEnumerator* iEnum = tblAuthors->Rows->GetEnumerator();
            
     while(iEnum->MoveNext())
     {
            Console::WriteLine("{0}   {1}",dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_fname")),
                                           dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_lname")));
     }
    
  10. Guardar el proyecto. En el menú Depurar , haga clic en iniciar para ejecutar el proyecto.



Lista de código completa

// This is the main project file for the VC++ application project 
// that is generated by using the Application wizard.

#include "stdafx.h"

#using <mscorlib.dll>
#include <tchar.h>
#using <System.Dll>
#using <System.Data.Dll>
#using <System.Xml.Dll>

using namespace System;
using namespace System::Data;
using namespace System::Xml;
using namespace System::Collections;
using namespace System::Data::SqlClient;

// This is the entry point for this application.
int _tmain(void)
{
    SqlConnection* objConn;
    try
    {

        
        String* sConnectionString;
        sConnectionString = "Password=myPassword;User ID=myUserID;Initial Catalog=pubs;Data Source=(local)";

        objConn = new SqlConnection(sConnectionString);
        objConn->Open();
        
        SqlDataAdapter* daAuthors = new SqlDataAdapter("Select * From Authors", objConn);
        DataSet* dsPubs = new DataSet("Pubs");
        
        daAuthors->FillSchema(dsPubs,SchemaType::Source, "Authors");
        daAuthors->Fill(dsPubs,"Authors");

        DataTable* tblAuthors = dsPubs->Tables->Item["Authors"];
        
        IEnumerator* iEnum = tblAuthors->Rows->GetEnumerator();
        
        while(iEnum->MoveNext())
        {
            Console::WriteLine("{0}   {1}",dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_fname")),
                                           dynamic_cast<String*>(dynamic_cast<DataRow *>(iEnum->Current)->get_Item("au_lname")));
            
        }
    }
    catch(Exception *ex)
    {
        Console::WriteLine( ex->Message );
    }
    __finally
    {
        objConn->Close();
    }
    
    return 0;
}
Nota Debe agregar la opción de compilador de common language runtime soporte (/ CLR: oldSyntax) en Visual C++ 2005 para compilar correctamente el ejemplo de código anterior. Para agregar la opción de compilador de common language runtime compatibilidad en Visual C++ 2005, siga estos pasos:
  1. Haga clic en proyecto y, a continuación, haga clic en <ProjectName> propiedades .

    Nota <ProjectName> es un marcador de posición para el nombre del proyecto.
  2. Expanda Propiedades de configuración y, a continuación, haga clic en General .
  3. Haga clic para seleccionar compatible con Common Language Runtime, sintaxis antigua (/ CLR: oldSyntax) en la configuración de proyecto compatibilidad con Common Language Runtime en el panel derecho, haga clic en Aplicar y, a continuación, haga clic en Aceptar .
Para obtener más información acerca de common language runtime admite (opción del compilador), visite el siguiente sitio Web de Microsoft:
/ clr (Common Language Runtime Compilation)
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx

Referencias

Para obtener más información, visite los siguientes sitios Web de Microsoft (pueden estar en inglés):

http://msdn2.microsoft.com/en-us/library/ms810293.aspx

http://msdn2.microsoft.com/en-us/library/ms973217.aspx

http://msdn.microsoft.com/net

Propiedades

Id. de artículo: 818779 - Última revisión: miércoles, 16 de mayo de 2007 - Versión: 3.2
La información de este artículo se refiere a:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard
  • Microsoft Visual C++ .NET 2002 Standard
  • Microsoft ADO.NET 1.1
  • Microsoft ADO.NET 1.0
Palabras clave: 
kbmt kbsystemdata kbsqlclient kbhowtomaster kbhowto KB818779 KbMtes
Traducció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): 818779

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com