Tutorial: Recuperar los datos almacenados en caché de un libro de trabajo de un servidor
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.
Se aplica a: la información de este tema se aplica a los proyectos de nivel de documento para Excel 2007 y Excel 2010. Para obtener más información, vea Características disponibles por aplicación y tipo de proyecto de Office.
En este tutorial se muestran las tareas siguientes:
Definir un conjunto de datos que contenga datos de la base de datos AdventureWorksLT.
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é utilizando determinan estos elementos. Para obtener más información, vea Trabajar con valores de configuración.
Requisitos previos
Necesita los componentes siguientes para completar este tutorial:
-
Una edición de Visual Studio 2010 que incluye las herramientas para desarrolladores de Microsoft Office. Para obtener más información, vea [Configurar un equipo para desarrollar soluciones de Office](bb398242\(v=vs.100\).md).
Excel 2007 o Excel 2010.
Acceso a una instancia en ejecución de Microsoft SQL Server o Microsoft SQL Server Express que tenga adjunta 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:
Para adjuntar una base de datos mediante SQL Server Management Studio o SQL Server Management Studio Express, vea Cómo adjuntar una base de datos (SQL Server Management Studio).
Para adjuntar una base de datos mediante la línea de comandos, vea Cómo adjuntar un archivo de base de datos a SQL Server Express.
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
Inicie Visual Studio.
En el menú Archivo, elija Nuevo y haga clic en Proyecto.
En el recuadro de plantillas, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.
En la lista de plantillas de proyecto, seleccione Biblioteca de clases.
En el cuadro Nombre, escriba AdventureWorksDataSet.
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.
En el cuadro de diálogo Nuevo proyecto, asegúrese de que no esté activada la casilla Crear directorio para la solución.
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.
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, hará referencia a este conjunto de datos desde 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 Trabajar con los conjuntos de datos en Visual Studio.
Para definir un conjunto de datos con tipo en el proyecto de biblioteca de clases
En el Explorador de soluciones, haga clic en el proyecto AdventureWorksDataSet.
En el menú Datos, haga clic en Agregar nuevo elemento.
Se abrirá el Asistente para la configuración de orígenes de datos.
Haga clic en Base de datos y, a continuación, haga clic en Siguiente.
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: Conectarse a los datos de una base de datos.
En la página Save the Connection String to the Application Configuration File, haga clic en Next.
En la página Elija los objetos de base de datos, expanda Tablas y, a continuación, seleccione Product (SalesLT).
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.
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
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.
En el recuadro de plantillas, expanda Visual C# o Visual Basic y, a continuación, expanda Office.
En el nodo Office expandido, seleccione el nodo 2007 ó 2010.
En la lista de plantillas de proyecto, seleccione el proyecto Libro de Excel.
En el cuadro Nombre, escriba AdventureWorksReport. No modifique la ubicación.
Haga clic en Aceptar.
Se abre el Asistente para proyectos de Visual Studio Tools para Office.
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
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.
En el menú Datos, haga clic en Agregar nuevo elemento.
Se abrirá el Asistente para la configuración de orígenes de datos.
Haga clic en Objeto y, a continuación, haga clic en Siguiente.
En la página Seleccione el objeto que desee enlazar a, haga clic en Agregar referencia.
En la ficha Proyectos, haga clic en AdventureWorksDataSet y, a continuación, haga clic en Aceptar.
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 en soluciones de Office.
Para crear un control ListObject enlazado a una instancia del conjunto de datos
En la ventana Orígenes de datos, expanda el nodo AdventureWorksLTDataSet debajo de AdventureWorksDataSet.
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.
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 Datos almacenados en caché en las personalizaciones de nivel de documento y Almacenar datos en caché.
Para agregar el conjunto de datos a la memoria caché de datos
En el diseñador, haga clic en adventureWorksLTDataSet.
En la ventana Propiedades, establezca la propiedad Modifiers en Public.
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
En el Explorador de soluciones, haga clic con el botón secundario en Sheet1.cs o Sheet1.vb y seleccione Ver código.
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
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 correspondiente a 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.
Guarde el libro. No modifique el nombre de archivo ni la ubicación del libro.
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
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.
En el panel Tipos de proyecto, expanda Visual C# o Visual Basic y, a continuación, haga clic en Windows.
En el panel Plantillas, seleccione Aplicación de consola.
En el cuadro Nombre, escriba DataReader. No modifique la ubicación.
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é
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.
En la pestaña .NET, seleccione Microsoft.VisualStudio.Tools.Applications.ServerDocument (si el proyecto DataReader tiene como destino .NET Framework 4) o Microsoft.VisualStudio.Tools.Applications.ServerDocument.v10.0 (si el proyecto DataReader tiene como destino .NET Framework 3.5).
Haga clic en Aceptar.
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.
En la ficha Proyectos, seleccione AdventureWorksDataSet y, a continuación, haga clic en Aceptar.
Abra el archivo Program.cs o Module1.vb en el Editor de código.
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;
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;
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(); }
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
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.
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:
Inicializar los datos en un conjunto de datos almacenado en memoria caché sin iniciar Excel. Para obtener más información, vea Tutorial: Insertar datos en un libro de trabajo de un servidor.
Cambiar los datos en un conjunto de datos almacenado en memoria caché sin iniciar Excel. Para obtener más información, vea Tutorial: Cambiar los datos almacenados en caché de un libro de trabajo de un servidor.
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