Compartir a través de


Tutorial: Recuperar los datos almacenados en caché de un libro de trabajo de un servidor

Actualización: noviembre 2007

Se aplica a

La información de este tema sólo se aplica a los proyectos de Visual Studio Tools para Office y versiones de Microsoft Office especificados.

Tipo de proyecto

  • Proyectos de nivel de documento

Versión de Microsoft Office

  • Excel 2007

  • Excel 2003

Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto.

Este tutorial muestra cómo recuperar datos de un conjunto de datos que está almacenado en memoria caché en un libro de Microsoft Office Excel sin iniciar Excel, mediante la clase ServerDocument. Este tutorial proporciona instrucciones paso a paso para utilizar el ejemplo de código que se proporciona en Cómo: Recuperar los datos almacenados en la memoria caché de un libro ubicado en un servidor.

Este tutorial ilustra las tareas siguientes:

  • Definir un conjunto de datos que contenga datos de la base de datos AdventureWorksLT para Microsoft SQL Server 2005.

  • Crear instancias del conjunto de datos en un proyecto de libro de Excel y un proyecto de aplicación de consola.

  • Crear un objeto ListObject enlazado al conjunto de datos del libro y rellenar ListObject con datos al abrir el libro.

  • Agregar el conjunto de datos del libro a la memoria caché de datos.

  • Leer datos del conjunto de datos almacenado en memoria caché y copiarlos en el conjunto de datos en la aplicación de consola, sin iniciar Excel.

Si bien en este tutorial se supone que el código se ejecuta en un equipo de desarrollo, el código que se muestra en este tutorial puede utilizarse en un servidor que no tenga instalado Excel.

Nota:

Es posible que su equipo muestre nombres o ubicaciones diferentes para algunos de los elementos de la interfaz de usuario de Visual Studio en las siguientes instrucciones. La edición de Visual Studio que tenga y la configuración que esté usando determinan estos elementos. Para obtener más información, vea Valores de configuración de Visual Studio.

Requisitos previos

Necesita los componentes siguientes para completar este tutorial:

  • Visual Studio Tools para Office (componente opcional de Visual Studio 2008 Professional y Visual Studio Team System).

    Visual Studio Tools para Office se instala de forma predeterminada con las versiones mostradas de Visual Studio. Para comprobar si está instalado, consulte Instalar Visual Studio Tools para Office.

  • Excel 2007 o Excel 2003.

  • Acceso a una instancia en ejecución de SQL Server 2005 o SQL Server 2005 Express que tenga asociada la base de datos de ejemplo AdventureWorksLT. La base de datos AdventureWorksLT se puede descargar desde el sitio web de CodePlex. Para obtener más información sobre cómo asociar una base de datos, vea los siguientes temas:

Crear un proyecto de biblioteca de clases que defina un conjunto de datos

Para utilizar el mismo conjunto de datos en un libro de Excel y en una aplicación de consola, debe definirlo en un ensamblado independiente al que ambos proyectos hagan referencia. Para este tutorial, defina el conjunto de datos en un proyecto de biblioteca de clases.

Para crear el proyecto de bibliotecas de clase

  1. Inicie Visual Studio.

  2. En el menú Archivo, elija Nuevo y haga clic en Proyecto.

  3. En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.

  4. En el panel Plantillas, seleccione Biblioteca de clases.

  5. En el cuadro Nombre, escriba AdventureWorksDataSet.

  6. Haga clic en Examinar, vaya a la carpeta %UserProfile%\Mis documentos (para Windows XP y versiones anteriores) o la carpeta %UserProfile%\Documentos (para Windows Vista) y, a continuación, haga clic en Seleccionar carpeta.

  7. En el cuadro de diálogo Nuevo proyecto, asegúrese de que no esté activada la casilla Crear directorio para la solución.

  8. Haga clic en Aceptar.

    Visual Studio agrega el proyecto AdventureWorksDataSet al Explorador de soluciones y abre el archivo de código Class1.cs o Class1.vb.

  9. En el Explorador de soluciones, haga clic con el botón secundario en Class1.cs o Class1.vb y, a continuación, haga clic en Eliminar. No necesita este archivo para este tutorial.

Definir un conjunto de datos en el proyecto de biblioteca de clases

Defina un conjunto de datos con tipo que contenga datos de la base de datos AdventureWorksLT para SQL Server 2005. Más adelante en este tutorial, va a hacer referencia a esta base de datos en un proyecto de libro de Excel y un proyecto de aplicación de consola.

El conjunto de datos es un conjunto de datos con tipo que representa los datos de la tabla Product en la base de datos AdventureWorksLT. Para obtener más información sobre los conjuntos de datos con tipo, vea Información general sobre conjuntos de datos en Visual Studio.

Para definir un conjunto de datos con tipo en el proyecto de biblioteca de clases

  1. En el Explorador de soluciones, haga clic en el proyecto AdventureWorksDataSet.

  2. En el menú Datos, haga clic en Agregar nuevo elemento.

    Se abrirá el Asistente para la configuración de orígenes de datos.

  3. Haga clic en Base de datos y, a continuación, haga clic en Siguiente.

  4. Si ya existe una conexión con la base de datos AdventureWorksLT, elija esta conexión y, a continuación, haga clic en Siguiente.

    De lo contrario, haga clic en Nueva conexión y utilice el cuadro de diálogo Agregar conexión para crear la nueva conexión. Para obtener más información, vea Cómo: Crear conexiones a bases de datos de SQL Server.

  5. En la página Save the Connection String to the Application Configuration File, haga clic en Next.

  6. En la página Elija los objetos de base de datos, expanda Tablas y, a continuación, seleccione Product (SalesLT).

  7. Haga clic en Finalizar.

    Se agrega el archivo AdventureWorksLTDataSet.xsd al proyecto AdventureWorksDataSet. Este archivo define los siguientes elementos:

    • Un conjunto de datos con tipo denominado AdventureWorksLTDataSet. Este conjunto de datos representa el contenido de la tabla Product en la base de datos AdventureWorksLT.

    • Objeto TableAdapter denominado ProductTableAdapter. Este TableAdapter puede usarse para leer y escribir datos en AdventureWorksLTDataSet. Para obtener más información, vea Información general sobre TableAdapter.

    Estos dos objetos se utilizarán más adelante en este tutorial.

  8. En el Explorador de soluciones, haga clic con el botón secundario en AdventureWorksDataSet y, a continuación, haga clic en Generar.

    Compruebe si el proyecto se genera sin errores.

Crear un proyecto de libro de Excel

Cree un proyecto de libro de Excel para la interfaz a los datos. Más adelante en este tutorial, va a crear un control ListObject que muestre los datos y va a agregar una instancia del conjunto de datos a la memoria caché de datos del libro.

Para crear un proyecto de libro de Excel

  1. En el Explorador de soluciones, haga clic con el botón secundario en la solución AdventureWorksDataSet, elija Agregar y, a continuación, haga clic en Nuevo proyecto.

  2. En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, expanda Office.

  3. Seleccione la carpeta 2007 si utiliza Excel 2007 en el equipo de desarrollo, o bien, seleccione la carpeta 2003 si utiliza Excel 2003.

  4. En el panel Plantillas, seleccione Libro de Excel.

  5. En el cuadro Nombre, escriba AdventureWorksReport. No modifique la ubicación.

  6. Haga clic en Aceptar.

    Se abre el Asistente para proyectos de Visual Studio Tools para Office.

  7. Asegúrese de que esté seleccionada la opción Crear un nuevo documento y, a continuación, haga clic en Aceptar

    Visual Studio abre el libro AdventureWorksReport en el diseñador y agrega el proyecto AdventureWorksReport al Explorador de soluciones.

Agregar el conjunto de datos a los orígenes de datos en el proyecto de libro de Excel

Para poder mostrar el conjunto de datos en el libro de Excel, es preciso agregarlo primero a los orígenes de datos en el proyecto de libro de Excel.

Para agregar el conjunto de datos a los orígenes de datos en el proyecto de libro de Excel

  1. En el Explorador de soluciones, haga doble clic en Sheet1.cs o Sheet1.vb debajo del proyecto AdventureWorksReport.

    El libro se abre en el diseñador.

  2. En el menú Datos, haga clic en Agregar nuevo elemento.

    Se abrirá el Asistente para la configuración de orígenes de datos.

  3. Haga clic en Objeto y, a continuación, haga clic en Siguiente.

  4. En la página Seleccione el objeto que desee enlazar a, haga clic en Agregar referencia.

  5. En la ficha Proyectos, haga clic en AdventureWorksDataSet y, a continuación, haga clic en Aceptar.

  6. Debajo del espacio de nombres AdventureWorksDataSet del ensamblado AdventureWorksDataSet, haga clic en AdventureWorksLTDataSet y, a continuación, haga clic en Finalizar.

    Se abre la ventana Orígenes de datos y se agrega AdventureWorksLTDataSet a la lista de orígenes de datos.

Crear un control ListObject enlazado a una instancia del conjunto de datos

Para mostrar el conjunto de datos en el libro, cree un control ListObject que esté enlazado a una instancia del conjunto de datos. Para obtener más información sobre cómo enlazar controles a datos, vea Enlazar datos a controles.

Para crear un control ListObject enlazado a una instancia del conjunto de datos

  1. En la ventana Orígenes de datos, expanda el nodo AdventureWorksLTDataSet debajo de AdventureWorksDataSet.

  2. Seleccione el nodo Producto, haga clic en la flecha desplegable que aparece y, a continuación, seleccione ListObject en la lista desplegable.

    Si no aparece la flecha desplegable, confirme que el libro está abierto en el diseñador.

  3. Arrastre la tabla Product hasta la celda A1.

    Se crea un control ListObject denominado productListObject en la hoja de cálculo, a partir de la celda A1. Al mismo tiempo, se agregan al proyecto un objeto de conjunto de datos denominado adventureWorksLTDataSet y una clase BindingSource denominada productBindingSource. El control ListObject se enlaza al componente BindingSource, que a su vez se enlaza al objeto de base de datos.

Agregar el conjunto de datos a la memoria caché de datos

Para permitir que código fuera del proyecto de libro de Excel obtenga acceso al conjunto de datos del libro, debe agregar el conjunto de datos a la memoria caché de datos. Para obtener más información sobre la memoria caché de datos, vea Modelo de datos en las personalizaciones de nivel de documento y Almacenar datos en caché.

Para agregar el conjunto de datos a la memoria caché de datos

  1. En el diseñador, haga clic en adventureWorksLTDataSet.

  2. En la ventana Propiedades, establezca la propiedad Modifiers en Public.

  3. Establezca la propiedad CacheInDocument en True.

Inicializar el conjunto de datos en el libro

Antes de poder recuperar los datos del conjunto de datos almacenado en memoria caché utilizando la aplicación de consola, debe rellenarlo con datos.

Para inicializar el conjunto de datos en el libro

  1. En el Explorador de soluciones, haga clic con el botón secundario en Sheet1.cs o Sheet1.vb y seleccione Ver código.

  2. Reemplace el controlador de evento Sheet1_Startup con el código siguiente. Este código utiliza una instancia de la clase ProductTableAdapter definida en el proyecto AdventureWorksDataSet para rellenar con datos el conjunto de datos almacenado en memoria caché, si actualmente está vacío.

    Private ProductTableAdapter As New  _
        AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter()
    
    Private Sub Sheet1_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
        If Me.NeedsFill("AdventureWorksLTDataSet") Then
            Me.ProductTableAdapter.Fill(Me.AdventureWorksLTDataSet.Product)
        End If
    End Sub
    
    private AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter productTableAdapter =
        new AdventureWorksDataSet.AdventureWorksLTDataSetTableAdapters.ProductTableAdapter();
    
    private void Sheet1_Startup(object sender, System.EventArgs e)
    {
        if (this.NeedsFill("adventureWorksLTDataSet"))
        {
            this.productTableAdapter.Fill(this.adventureWorksLTDataSet.Product);
        }
    }
    

Punto de control

Genere y ejecute el proyecto de libro de Excel para asegurarse de que se compile y se ejecute sin errores. Esta operación también rellena el conjunto de datos almacenado en memoria caché y guarda los datos en el libro.

Para generar y ejecutar el proyecto

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto AdventureWorksReport, elija Depurar y, a continuación, haga clic en Iniciar nueva instancia.

    Se genera el proyecto y se abre el libro en Excel. Compruebe lo siguiente:

    • ListObject se rellena con datos.

    • El valor de la columna ListPrice de la primera fila de ListObject es 1431.5. Más adelante en este tutorial utilizará una aplicación de consola para modificar los valores de la columna ListPrice.

  2. Guarde el libro. No modifique el nombre de archivo ni la ubicación del libro.

  3. Cierre Excel.

Crear un proyecto de aplicación de consola

Cree un proyecto de aplicación de consola que utilizará para modificar los datos contenidos en el conjunto de datos almacenado en memoria caché del libro.

Para crear un proyecto de aplicación de consola

  1. En el Explorador de soluciones, haga clic con el botón secundario en la solución AdventureWorksDataSet, elija Agregar y, a continuación, haga clic en Nuevo proyecto.

  2. En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.

  3. En el panel Plantillas, seleccione Aplicación de consola.

  4. En el cuadro Nombre, escriba DataReader. No modifique la ubicación.

  5. Haga clic en Aceptar.

    Visual Studio agrega el proyecto DataReader al Explorador de soluciones y abre el archivo de código Program.cs o Module1.vb.

Recuperar datos del conjunto de datos almacenado en memoria caché utilizando la aplicación de consola

Utilice la clase ServerDocument en la aplicación de consola para leer los datos y copiarlos en un objeto AdventureWorksLTDataSet local. Para confirmar que el conjunto de datos local se inicializó con datos del conjunto de datos almacenado en memoria caché, la aplicación muestra el número de filas del conjunto de datos local.

Para recuperar los datos del conjunto de datos almacenado en memoria caché

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto DataReader y, a continuación, haga clic en Agregar referencia.

  2. En la ficha .NET, seleccione uno de los siguientes ensamblados:

    • Si utiliza Excel 2007 en el equipo de desarrollo, seleccione Microsoft.VisualStudio.Tools.Applications.ServerDocument.v9.0.

    • Si utiliza Excel 2003, seleccione Microsoft.VisualStudio.Tools.Applications.Runtime.

    Estos ensamblados definen diferentes versiones de la clase ServerDocument que se utilizan en los proyectos para 2007 Microsoft Office system y Microsoft Office 2003. Para obtener más información, vea Administrar documentos en un servidor mediante la clase ServerDocument.

  3. Haga clic en Aceptar.

  4. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto DataReader y, a continuación, haga clic en Agregar referencia.

  5. En la ficha Proyectos, seleccione AdventureWorksDataSet y, a continuación, haga clic en Aceptar.

  6. Abra el archivo Program.cs o Module1.vb en el Editor de código.

  7. Agregue la siguiente instrucción using (para C#) o Imports (para Visual Basic) al principio del archivo de código.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Agregue el código siguiente al método Main. Este código declara los siguientes objetos:

    • Una instancia del tipo AdventureWorksLTDataSet que se define en el proyecto AdventureWorksDataSet.

    • La ruta de acceso al libro AdventureWorksReport en la carpeta de compilación del proyecto AdventureWorksReport.

    • Un objeto ServerDocument que se va a usar para obtener acceso a la memoria caché de datos en el libro.

      Nota:

      El código siguiente supone que el libro se ha guardado con la extensión .xlsx. Si el libro del proyecto tiene una extensión diferente, modifique la ruta de acceso según proceda.

    Dim productDataSet As New AdventureWorksDataSet.AdventureWorksLTDataSet()
    Dim workbookPath As String = System.Environment.GetFolderPath( _
        Environment.SpecialFolder.MyDocuments) & _
        "\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx"
    Dim serverDocument1 As ServerDocument = Nothing
    
    AdventureWorksDataSet.AdventureWorksLTDataSet productDataSet =
        new AdventureWorksDataSet.AdventureWorksLTDataSet();
    string workbookPath = System.Environment.GetFolderPath(
        Environment.SpecialFolder.MyDocuments) +
        @"\AdventureWorksReport\bin\Debug\AdventureWorksReport.xlsx";
    ServerDocument serverDocument1 = null;
    
  9. Agregue el siguiente código al método Main, después del código que agregó en el paso anterior. Este código realiza las tareas siguientes:

    • Utiliza la propiedad CachedData de la clase ServerDocument para obtener acceso al conjunto de datos almacenado en caché del libro.

    • Lee los datos del conjunto de datos almacenado en memoria caché y los copia en el conjunto de datos local.

    • Muestra el número de filas del conjunto de datos local, para confirmar que contiene datos.

    Try
        serverDocument1 = New ServerDocument(workbookPath)
        Dim dataHostItem1 As CachedDataHostItem = _
            serverDocument1.CachedData.HostItems("AdventureWorksReport.Sheet1")
        Dim dataItem1 As CachedDataItem = dataHostItem1.CachedData("AdventureWorksLTDataSet")
    
        If dataItem1 IsNot Nothing Then
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
    
            ' Read the cached data from the worksheet dataset into the local dataset.
            Dim schemaReader As New System.IO.StringReader(dataItem1.Schema)
            Dim xmlReader As New System.IO.StringReader(dataItem1.Xml)
            productDataSet.ReadXmlSchema(schemaReader)
            productDataSet.ReadXml(xmlReader)
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " & _
                "{0} rows.", productDataSet.Product.Rows.Count.ToString())
        Else
            Console.WriteLine("The data object is not found in the data cache.")
        End If
    Catch ex As System.IO.FileNotFoundException
        Console.WriteLine("The specified workbook does not exist.")
    Catch ex As System.Xml.XmlException
        Console.WriteLine("The data object has invalid XML information.")
    Finally
        If Not (serverDocument1 Is Nothing) Then
            serverDocument1.Close()
        End If
        Console.WriteLine(vbLf & vbLf & "Press Enter to close the application.")
        Console.ReadLine()
    End Try
    
    try
    {
        serverDocument1 = new ServerDocument(workbookPath);
        CachedDataHostItem dataHostItem1 =
            serverDocument1.CachedData.HostItems["AdventureWorksReport.Sheet1"];
        CachedDataItem dataItem1 = dataHostItem1.CachedData["adventureWorksLTDataSet"];
    
        if (dataItem1 != null)
        {
            Console.WriteLine("Before reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
    
            // Read the cached data from the worksheet dataset into the local dataset.
            System.IO.StringReader schemaReader = new System.IO.StringReader(dataItem1.Schema);
            System.IO.StringReader xmlReader = new System.IO.StringReader(dataItem1.Xml);
            productDataSet.ReadXmlSchema(schemaReader);
            productDataSet.ReadXml(xmlReader);
    
            Console.WriteLine("After reading data from the cache dataset, the local dataset has " +
                "{0} rows.", productDataSet.Product.Rows.Count.ToString());
        }
        else
        {
            Console.WriteLine("The data object is not found in the data cache.");
        }
    }
    catch (System.IO.FileNotFoundException)
    {
        Console.WriteLine("The specified workbook does not exist.");
    }
    catch (System.Xml.XmlException)
    {
        Console.WriteLine("The data object has invalid XML information.");
    }
    finally
    {
        if (serverDocument1 != null)
        {
            serverDocument1.Close();
        }
    
        Console.WriteLine("\n\nPress Enter to close the application.");
        Console.ReadLine();
    }
    
  10. En el menú Generar, haga clic en Generar DataReader.

Probar el proyecto

Al ejecutar la aplicación de consola, muestra el número de filas del conjunto de datos local.

Para probar el libro

  1. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto DataReader, elija Depurar y, a continuación, haga clic en Iniciar nueva instancia.

    Compruebe que la información informe de que el conjunto de datos local tiene 295 filas.

  2. Presione ENTRAR para cerrar la aplicación.

Pasos siguientes

Para obtener más información sobre cómo trabajar con datos almacenados en caché, vea estos temas:

Vea también

Tareas

Cómo: Recuperar los datos almacenados en la memoria caché de un libro ubicado en un servidor

Cómo: Insertar datos en un libro ubicado en un servidor

Tutorial: Insertar datos en un libro de trabajo de un servidor

Tutorial: Cambiar los datos almacenados en caché de un libro de trabajo de un servidor

Conceptos

Conectarse a datos en Información general de Visual Studio