Compartilhar via


Demonstra Passo a passo: Alterar dados em cache em uma pasta de trabalho em um servidor

Se aplica a

As informações contidas neste tópico se aplicam apenas às especificado Ferramentas do Visual Studio para o Office projetos e as versões do Microsoft Office.

Tipo de Projeto

  • Projetos de nível de documento

Versão do Microsoft Office

  • O Excel 2007

  • O Excel 2003

For more information, see Recursos disponíveis pelo aplicativo e o tipo de projeto.

Esta explicação passo a passo demonstra como modificar um dataset que é armazenada em cache em uma pasta de trabalho do Microsoft Office Excel sem iniciar o Excel usando a classe ServerDocument.Nesta explicação passo a passo fornece instruções passo a passo para usar os exemplos de código são fornecidos no Como: Alterar de dados em uma pasta de trabalho em um servidor em cache.

Essa explicação passo a passo ilustra as seguintes tarefas:

  • Definição de um dataset que contém dados do banco de dados AdventureWorksLT para Microsoft SQL Servidor 2005.

  • Criando instâncias do dataset em um projeto de pasta de trabalho do Excel e um projeto de Aplicativo do Console.

  • Criando um ListObject que será Ligado ao dataset na pasta de trabalho e preencher o ListObject com dados quando a pasta de trabalho é aberta.

  • Adicionar o dataset na pasta de trabalho ao cache de dados.

  • Modificar uma coluna de dados no dataset em cache executando o código no Aplicativo do Console, sem iniciar o Excel.

Embora esta explicação passo a passo assume que você está executando o código no seu computador de desenvolvimento, o código demonstrado nesta explicação passo a passo pode ser usado em um servidor que não tenha o Excel instalado.

Observação:

Seu computador pode mostrar diferentes nomes ou localizações para alguns dos elementos de interface do usuário do Visual Studio nas instruções a seguir.A edição do Visual Studio que você possui e as configurações que você usa determinam esses elementos.Para obter mais informações, consulte Configurações do Visual Studio.

Pré-requisitos

Para completar este passo a passo, são necessários os seguintes componentes:

  • Ferramentas do Visual Studio para o Office (um componente opcional do O Visual Studio 2008 Professional e Visual Studio Team System).

    Ferramentas do Visual Studio para o Office é instalado por padrão com as versões listadas do Visual Studio.Para Marcar se ele está instalado, Marcar Instalando o Visual Studio Tools para Office.

  • O Excel 2007 ou no Excel 2003.

  • Acessar a uma instância Executando do SQL Servidor 2005 ou SQL Servidor 2005 Express que tenha o AdventureWorksLT exemplo de banco de dados anexado a ele.Você pode baixar o banco de dados AdventureWorksLT de CodePlex Web site.Para obter mais informações sobre anexando um banco de dados, consulte os tópicos a seguir:

Criando um projeto de biblioteca de classes que define um DataSet

Para usar o mesmo dataset em um projeto de pasta de trabalho do Excel e um Aplicativo do Console, você deve definir o conjunto de dados em um assembly separado que é citado pelo ambos esses projetos.Para esta explicação passo a passo, Definir o dataset em um projeto de Biblioteca de Classess.

Para criar o projeto de Biblioteca de Classes

  1. Inicie o Visual Studio

  2. No menu File, aponte para New, e em seguida, clique em Project.

  3. No painel de A Projeto Types, Expandirir Visual C# ou Visual Basice clique em Windows.

  4. No painel modelos, Selecionar De biblioteca de classes.

  5. Na caixa Nome, tipo AdventureWorksDataSet.

  6. Clique em Procurar, navegue para seu %UserProfile%\My documentos (para o Windows XP e anteriormente) ou a pasta %UserProfile%\Documents (para Windows Vista) e, em seguida, clique em Selecionar a pasta.

  7. Na Novo Projeto caixa de diálogo, verifique que a Criar Diretório for solução Caixa de Marcar não estiver Selecionadoda.

  8. Clique em OK.

    Visual Studio adiciona o projeto de AdventureWorksDataSet para Gerenciador de Soluções e abre a Class1.cs ou o arquivo de código do Class1.vb.

  9. Em Gerenciador de Soluções, clique com o botão direito do mouse de Class1.cs ou Class1.vbe clique em Excluir.Você não precisa esse arquivo para esta explicação passo a passo.

Definir um dataset no projeto de Biblioteca de Classes

Definir um dataset tipado que contém dados do banco de dados AdventureWorksLT para SQL Servidor 2005.Posteriormente neste passo-a-passo, você fará referência isso DataSet de um projeto de pasta de trabalho do Excel e um projeto de Aplicativo do Console.

O dataset é um digitado dataset que representa os dados na tabela produtos de banco de dados AdventureWorksLT.Para obter mais informações sobre datasets tipados, consulte Datasets in Visual Studio Overview.

Para definir um dataset tipado no projeto de biblioteca de classes

  1. Em Gerenciador de Soluções, clique no projeto de AdventureWorksDataSet.

  2. No menu Data, clique em Add New Data Source.

    O Data Source Configuration Wizard é aberto.

  3. Clique em do banco de dados e clique em Avançar de .

  4. Se você tiver uma conexão existente para o banco de dados AdventureWorksLT, escolha essa conexão e clique em Avançar de .

    Caso contrário, clique em Novo conexãoe use o Adicionar Conexão caixa de diálogo para criar a Novo conexão.For more information, see Como: Criar conexões para SQL Servidor bancos de dados.

  5. No Salvar o Cadeia de Caracteres da Conexão para a página de Aplicativo Configuration Arquivo, clique em Avançar de .

  6. Na página Choose Your Banco de Dados Objects, Expandirir Tabelas e Selecionar de produto (SalesLT) .

  7. Clique em Finish.

    AdventureWorksLTDataSet. Arquivo XSD é adicionado ao projeto AdventureWorksDataSet.Este arquivo define os seguintes itens:

    • Um conjunto de dados tipado chamado AdventureWorksLTDataSet.Isso DataSet representa o conteúdo da tabela Produtos no banco de dados AdventureWorksLT.

    • Um TableAdapter denominado ProductTableAdapter.Este TableAdapter pode ser usado para ler e gravar dados na AdventureWorksLTDataSet.For more information, see Visão geral do TableAdapter.

    Você irá usar ambos esses objetos posteriormente neste passo-a-passo.

  8. Em Gerenciador de Soluções, clique com o botão direito do mouse AdventureWorksDataSet e clique em Compilação.

    Verifique se que o projeto compila sem erros.

Criando um projeto de pasta de trabalho do Excel

Criar um projeto de pasta de trabalho do Excel para a interface para os dados.Posteriormente nesta explicação passo a passo, você criará um ListObject que exibe os dados, e você irá adicionar uma instância do dataset para o cache de dados na pasta de trabalho.

Para criar o projeto de pasta de trabalho do Excel

  1. Em dGerenciador de Soluções, clique com o botão direito do mouse AdventureWorksDataSet solução, aponte para Adicionare clique em Novo projeto.

  2. No painel de A Projeto Types, Expandirir Visual C# ou do Visual Basic e em seguida, Expandirir Office.

  3. Selecionar a pasta de 2007 se você estiver usando o Excel 2007 no computador de desenvolvimento, ou Selecionar a pasta de 2003 se você estiver usando o Excel 2003.

  4. No painel modelos, Selecionar Da pasta de trabalho do Excel.

  5. Na caixa Nome, tipo AdventureWorksReport.Não modifique o local.

  6. Clique em OK.

    Abre o Visual Studio Tools para Office Projeto Assistente.

  7. Certifique-se de que criar um documento novo Está Selecionadoda e clique em OK .

    Visual Studio abre a pasta de trabalho AdventureWorksReport no designer e o adiciona o projeto de AdventureWorksReport para Gerenciador de Soluções.

Adicionar o DataSet a fontes de dados em projeto de pasta de trabalho do Excel

Antes de você poder exibir o conjunto de dados na pasta de trabalho do Excel, primeiro você deve adicionar o dataset a fontes de dados do projeto de pasta de trabalho do Excel.

Para adicionar o dataset para as fontes de dados do projeto de pasta de trabalho do Excel

  1. Em Gerenciador de Soluções, clique Duplo Sheet1.cs ou Sheet1.vb no projeto AdventureWorksReport.

    A pasta de trabalho abre no designer.

  2. No menu Data, clique em Add New Data Source.

    O Data Source Configuration Wizard é aberto.

  3. Clique em Objetoe clique em Avançar de .

  4. No Selecionar o objeto que deseja Ligar à página de , clique em Adicionar Referência.

  5. Na guia Projects, clique em AdventureWorksDataSet e clique em OK de .

  6. No namespace AdventureWorksDataSet de AdventureWorksDataSet assembly, clique em AdventureWorksLTDataSet e clique em Concluir.

    A janela de fontes de dados é aberta, e AdventureWorksLTDataSet é adicionado à lista de fontes de dados.

Criando um ListObject que É Ligado a uma instância do DataSet

Para exibir o conjunto de dados na pasta de trabalho, Criar um ListObject que será Ligado a uma instância do dataset.Para obter mais informações sobre controles de ligação a dados, consulte Vinculando dados a controles.

Para criar um ListObject que será Ligado a uma instância do dataset

  1. Na janela Data Sources, Expandirir o nó de AdventureWorksLTDataSet em AdventureWorksDataSet.

  2. Selecionar o Produto nó, clique na seta suspensa que aparece e Selecionar ListObject Soltar suspensa.

    Se o Soltar - para baixo Seta não aparece, confirme que a pasta de trabalho estiver aberta no designer.

  3. Arraste a tabela de De produtos de para a célula A1.

    Um Controlarar de ListObject chamado productListObject é criado na planilha, começando na célula A1.Ao mesmo tempo, um objeto de dataset chamado adventureWorksLTDataSet e um BindingSource chamado productBindingSource são adicionados ao projeto.O ListObject está Ligado a BindingSource, que por sua vez é Ligados ao objeto dataset.

Adicionar o DataSet ao cache de dados

Para habilitar código fora do projeto pasta de trabalho do Excel para acessar o dataset na pasta de trabalho, você deve adicionar o dataset para o cache de dados.Para obter mais informações sobre o cache de dados, consulte Modelo de dados no nível de documento personalizações e Cache de dados.

Para adicionar o dataset para o cache de dados

  1. No designer, clique em AdventureWorksLTDataSet.

  2. Na janela Propriedades , defina Modificadores de propriedade de a Público.

  3. Defina o CacheInDocument propriedade como Verdadeiro.

Inicializando o dataset na pasta de trabalho

Antes de você pode recuperar os dados do dataset em cache usando o Aplicativo do Console, primeiro você deve preencher o dataset em cache com dados.

Ao inicializar o dataset na pasta de trabalho

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse o Sheet1.cs ou o Sheet1.vb arquivo e clique em Exibir Code.

  2. Substituir o manipulador de eventos de Sheet1_Startup com o código a seguir.Esse código usa uma instância da classe ProductTableAdapter que é definido no projeto AdventureWorksDataSet para preencher o dataset em cache com dados, se ele estiver vazio no momento.

    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);
        }
    }
    

Ponto de Verificação

ComCompilação e executar o projeto de pasta de trabalho do Excel para garantir que compila e executa sem erros.Esta operação também preenche o dataset em cache e salva os dados na pasta de trabalho.

ParComCompilação e executar o projeto

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto de AdventureWorksReport, escolha Debuge, em seguida, clique em Iniciar Novo instância.

    O projeto é criado e a pasta de trabalho abre no Excel.Verifique o seguinte:

    • O ListObject preenche com dados.

    • O valor na coluna ListPrice para a Primeiro linha do ListObject é 1431.5.Posteriormente nesta explicação passo a passo, você usará um Aplicativo do Console para modificar os valores na coluna ListPrice.

  2. Salvar a pasta de trabalho.Não modifique o Nome do Arquivo ou do local da pasta de trabalho.

  3. Excel Fechar.

Criando um projeto de Aplicativo do Console

Criar um projeto de Aplicativo do Console para usar para modificar dados no dataset em cache na pasta de trabalho.

Para criar o projeto de Aplicativo do Console

  1. Em dGerenciador de Soluções, clique com o botão direito do mouse AdventureWorksDataSet solução, aponte para Adicionare clique em Novo projeto.

  2. No painel de A Projeto Types, Expandirir Visual C# ou Visual Basice clique em Windows.

  3. No painel modelos, Selecionar do Aplicativo do Console.

  4. Na caixa Nome, tipo DataWriter.Não modifique o local.

  5. Clique em OK.

    Visual Studio adiciona o projeto de DataWriter para Gerenciador de Soluções e abre a Programa.cs ou o arquivo de código do Module1.vb.

Alterando dados no dataset em cache usando o Aplicativo do Console

Usar a classe de ServerDocument no Aplicativo do Console para ler os dados em um objeto local AdventureWorksLTDataSet, modificar esses dados e, em seguida, Salvar volta para o dataset em cache.

Para alterar dados no dataset em cache

  1. Em Gerenciador de Soluções, clique com o botão direito do mouse o projeto de DataWriter e clique em Adicionar Referência.

  2. Na guia .NET, Selecionar um dos seguintes assemblies:

    • Se você estiver usando o Excel 2007 no computador de desenvolvimento, Selecionar Microsoft.VisualStudio.Tools.Applications.ServerDocument.v9.0.

    • Se você estiver usando o Excel 2003, Selecionar Microsoft.VisualStudio.Tools.Applications.Tempo de execução.

    Esses assemblies Definirm diferentes versões da classe ServerDocument que são usados por projetos para o 2007 Microsoft Office Sistema e o Microsoft Office 2003.For more information, see Gerenciando documentos em um servidor usando a classe do ServerDocument.

  3. Clique em OK.

  4. Em Gerenciador de Soluções, clique com o botão direito do mouse o projeto de DataWriter e clique em Adicionar Referência.

  5. Na guia Projects, Selecionar AdventureWorksDataSete, clique em OK de .

  6. Abrir o arquivo Programa.cs ou Module1.vb no editor de códigos.

  7. Adicionar o seguinte using (para C#) ou declaração de Imports (para o Visual Basic) para o início do arquivo código.

    Imports Microsoft.VisualStudio.Tools.Applications
    
    using Microsoft.VisualStudio.Tools.Applications;
    
  8. Adicione o seguinte código ao método Main.Esse código declara os seguintes objetos:

    • Uma instância do tipo AdventureWorksLTDataSet definida no projeto AdventureWorksDataSet.

    • O caminho para a pasta de trabalho AdventureWorksReport na pasta de compilação do projeto AdventureWorksReport.

    • Um objeto de ServerDocument usar para acessar o cache de dados na pasta de trabalho.

      Observação:

      O código a seguir presume que você estiver usando um Excel 2007 pasta de trabalho que tenha a.xlsx file extensão.Se a pasta de trabalho em seu projeto tiver um diferente file extensão, modifique o caminho conforme necessário.

    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. Adicione o seguinte código para o método de Main, após o código adicionado na etapa anterior.Esse código executa as seguintes tarefas:

    • Ele usa a propriedade CachedData da classe ServerDocument para acessar o dataset em cache na pasta de trabalho.

    • Ele lê os dados de o dataset em cache para o dataset local.

    • Ele altera o valor de ListPrice de cada produto na tabela de produtos do dataset.

    • Ele salva as alterações para o dataset em cache na pasta de trabalho.

    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())
    
            ' Modify the prices of each product in the local dataset.
            Dim row As AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow
            For Each row In productDataSet.Product.Rows
                If row.ProductCategoryID < 20 Then
                    row.ListPrice = row.ListPrice + row.ListPrice * 0.1
                Else
                    row.ListPrice = row.ListPrice - row.ListPrice * 0.1
                End If
            Next row
    
            ' Write the modified local dataset to the worksheet dataset using the DiffGram format.
            Dim stringIn As New System.Text.StringBuilder()
            Dim stringOut As New System.IO.StringWriter(stringIn)
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram)
            dataItem1.Xml = stringIn.ToString()
    
            serverDocument1.Save()
            Console.WriteLine("The product prices have been modified.")
        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());
    
            // Modify the prices of each product in the local dataset.
            foreach (AdventureWorksDataSet.AdventureWorksLTDataSet.ProductRow row in 
                     productDataSet.Product.Rows)
            {
                if (row.ProductCategoryID < 20)
                {
                    row.ListPrice = row.ListPrice + (row.ListPrice * (Decimal).10);
                }
                else
                {
                    row.ListPrice = row.ListPrice - (row.ListPrice * (Decimal).10);
                }
            }
    
            // Write the modified local dataset to the worksheet dataset using the DiffGram format.
            System.Text.StringBuilder stringIn = new System.Text.StringBuilder();
            System.IO.StringWriter stringOut = new System.IO.StringWriter(stringIn);
            productDataSet.WriteXml(stringOut, System.Data.XmlWriteMode.DiffGram);
            dataItem1.Xml = stringIn.ToString();
    
            serverDocument1.Save();
            Console.WriteLine("The product prices have been modified.");
        }
        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. Em Gerenciador de Soluções, clique com o botão direito do mouse no projeto de DataWriter, aponte para Depurare, em seguida, clique em Iniciar Novo instância.

    O Aplicativo do Console exibirá mensagens enquanto ele lê o dataset em cache para o dataset local, modifica os preços de produtos no dataset local e salva os valores novos para o dataset em cache.Pressionarionar ENTER para fechar o aplicativo.

Testando a pasta de trabalho

Quando você Abrir a pasta de trabalho, a ListObject agora exibe as alterações feitas à coluna ListPrice da dados no dataset em cache.

Para testar a pasta de trabalho

  1. Feche a pasta de trabalho AdventureWorksReport no designer do Visual Studio, se ainda estiver Abrir.

  2. Abrir a pasta de trabalho AdventureWorksReport, que está na pasta compilação do projeto AdventureWorksReport.Por padrão, a pasta de compilação é em um dos seguintes locais:

    • %UserProfile%\My Documents\AdventureWorksReport\bin\Depurar (para o Windows XP e anterior)

    • %UserProfile%\Documents\AdventureWorksReport\bin\Depurar (para Windows Vista)

  3. Verifique se o valor na coluna ListPrice na Primeiro linha do ListObject está agora 1574.65.

  4. Fechar a pasta de trabalho.

Próximas etapas

Você pode saber mais sobre como trabalhar com dados em cache destes tópicos:

Consulte também

Tarefas

Como: Inserir dados em uma pasta de trabalho em um servidor

Como: Recuperar dados de uma pasta de trabalho em um servidor armazenados em cache

Demonstra Passo a passo: Inserindo dados em uma pasta de trabalho em um servidor

Como: Inserir dados em documentos sem gravação em disco

Conceitos

Conectando-se a Dados no Visual Studio