Partilhar via


Demonstra Passo a passo: Modificar projetos de banco de dados usando o modelo de automação do Visual Studio

Você pode modificar programaticamente o projetos de banco de dados usando o suporte de extensibilidade no Visual Studio. sistema autônomo projetos de banco de dados em Visual Studio Team System Database Edition suporte a Visual Studio modelo de automação (também conhecido sistema autônomo time de design extensibilidade ou DTE) de forma que é consistente com translation from VPE for Csharp Visual e Visual Basic projetos. Para obter mais informações sobre esse modelo, consulte Estendendo o ambiente Visual Studio. Nesta explicação passo a passo, você criar Visual Studio macros que utilizam o modelo de automação para realizar duas tarefas:

  • Alternar entre a ação de compilação de todos os disparadores em um projeto de banco de dados.Se os disparadores são definidos como "compilação", a macro será-las alterado para "Not em desenvolvimento." Se os disparadores são "Not In compilação", a macro será-las alterado para "compilação".

  • Adicionar todos os arquivos de script em um diretório para uma pasta em um projeto de banco de dados.Se a pasta não existir, ele será criado.Somente os arquivos de script que tenham extensões específicas são adicionados.

Você também pode executar essas tarefas em um Visual Studio suplemento escrito em Visual translation from VPE for Csharp ou Visual Basic. Para manter a simplicidade, esta explicação passo a passo usa as macros.

Os procedimentos a seguir, você irá:

  • Criar um projeto de banco de dados são organizados por tipo de objeto e importar o esquema de banco de dados AdventureWorks.

  • inicialização o Gerenciador de Macro e criar módulos para conter macros e código de suporte.

  • criar uma macro para alternar a ação de compilação para todos os disparadores em um projeto de banco de dados na solução aberta.

  • Crie uma macro e o código de suporte para adicionar scripts ao seu projeto de banco de dados.

  • Executar a macro ToggleTriggers a partir de janela Comando.

  • Executar a macro AddScriptsInDirectory de Gerenciador de Macro.

Pré-requisitos

Para concluir esta explicação passo a passo, você deve ter instalado o Database Edition. Esta explicação passo a passo presume que você instalou uma cópia do banco de dados de exemplo AdventureWorks em um servidor de banco de dados que está executando o Microsoft SQL Server 2005.Você pode substituir qualquer Outros projeto do banco de dados organizados por tipo de objeto.Você deve ter um ou mais arquivos que têm a extensão. SQL em um diretório para os quais você tem acesso.

Para criar um projeto de banco de dados

  1. Iniciar o Visual Studio Se ainda não tiver concluído isso.

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

    A caixa de diálogo New Project será exibida.

  3. No Tipos de projeto lista, expandir o Projetos de banco de dados nó e clicar Microsoft SQL servidor.

  4. No Modelos clicar SQL servidor 2005.

  5. In Nome, digite MyAdvWorks e aceitar os valores padrão de Local and Nome da solução.

  6. selecionar o Criar diretório para solução caixa de seleção se ele não é selecionada por padrão e clicar OK.

    Uma solução é criada que contém o projeto de banco de dados MyAdvWorks, que está vazia.

    Em seguida você iniciará o processo de importação de esquema de banco de dados, em que você especificar uma cadeia de conexão com a fonte o banco de dados.

Para importar o esquema de banco de dados do banco de dados AdventureWorks existente

  1. Sobre o Modo de exibição menu, clicar Exibição esquema.

    Exibição esquema será exibido se ele já não era visível.

  2. clicar MyAdvWorks Exibição esquema.

  3. Sobre o Projeto menu, clicar Esquema de banco de dados de importação.

    Observação:

    Você também pode clicar com o botão direito do mouse em MyAdvWorks e clique em Esquema de banco de dados de importação.

    O Assistente de importação banco de dados será exibido.

  4. In the Source databaseconnection list, click the connection that corresponds to your existing AdventureWorks database.Se você não tiver ainda conectado a esse banco de dados, crie primeiro uma conexão a ela.Para obter mais informações, consulte Como: Criar uma conexão de banco de dados.

  5. Clique em Finish.

    sistema autônomo o esquema é importado, itens de projeto que correspondem aos objetos que estão no banco de dados aparecem no projeto de banco de dados em O gerenciador de soluções.Exibição esquema mostra os objetos definidos no projeto de banco de dados.

Para iniciar Gerenciador de Macro e criar módulos

  1. Sobre o Modo de exibição , aponte para Outros Windowse clicar Gerenciador de Macro.

    Gerenciador de Macro aparece.

  2. In Gerenciador de Macro, clicar com o botão direito do mouse no nó MyMacros e clique em Novo módulo.

    The Adicionar módulo caixa de diálogo é exibida.

  3. In Nome, digite BuildActionExample.

  4. Clique em Adicionar.

  5. In Gerenciador de Macro, clicar com o botão direito do mouse no nó MyMacros e clique em Novo módulo.

    The Adicionar módulo caixa de diálogo é exibida.

  6. In Nome, digite ImportScriptsExample.

  7. Clique em Adicionar.

    Em seguida você criar uma macro para alternar a ação de compilação de todos os Linguagem de manipulação de dados Disparadores (DML) em um banco de dados especificado.

Criar a Macro ToggleTriggers

A macro ToggleTriggers aceita um parâmetro opcional, que é o nome do projeto de banco de dados que contém os disparadores para atualizar.Se você não especificar um nome de projeto, a macro será aviso para um.Você poderia modificar a macro para identificar o tipo de cada projeto na solução e atualizar todos os projetos de banco de dados em vez disso.No entanto, essa abordagem está fora do escopo desta explicação passo a passo.

Para criar a macro ToggleTriggers

  1. In Gerenciador de Macro, clicar com o botão direito do mouse no módulo BuildActionExample e clique em edição.

    The Macros do Microsoft Visual Studio janela é exibida.Esta janela mostra o Sumário do seu módulo BuildActionExample.

  2. Substitua o Sumário de módulo com o código VBScript a seguir:

    Imports System
    Imports System.ComponentModel
    Imports EnvDTE
    Imports EnvDTE80
    Imports System.Diagnostics
    
    Public Module BuildActionExample
    
        ' Macro to toggle the BuildAction for all DML triggers
        ' in a database project.
        ' Before running this macro, you must:
        ' 1) Ensure that a solution file is open and saved to disk.
        ' 2) Pass in the name of a database project contained in the
        '    open solution in the dbProjName parameter. 
        Sub ToggleTriggers(Optional ByVal dbProjName As String = "")
            Dim project As Project
    
            ' if the database project name was not passed in, prompt the user for it.
            If (String.IsNullOrEmpty(dbProjName)) Then
                dbProjName = InputBox("Type the database project name.")
                If (String.IsNullOrEmpty(dbProjName)) Then
                    Return
                End If
            End If
    
            ' Loop through each project until we find the one we want
            For Each project In DTE.Solution
                Dim projectItem As EnvDTE.ProjectItem
                'Look for a project whose name matches the parameter
                If (dbProjName.Equals(project.Name)) Then
                    'Then loop through the project items, looking for
                    'the Schema Objects folder.
                    For Each projectItem In project.ProjectItems()
                        If (projectItem.Name = "Schema Objects") Then
                            ' loop through the subfolders and list the files, looking for the Tables sub-folder
                            Dim subItem As EnvDTE.ProjectItem
                            For Each subItem In projectItem.ProjectItems()
                                If (subItem.Name = "Tables") Then
                                    ' loop through looking for the Triggers subfolder
                                    Dim subsubItem As EnvDTE.ProjectItem
                                    For Each subsubItem In subItem.ProjectItems()
                                        If (subsubItem.Name = "Triggers") Then
                                            ' okay, we're in the right folder, now set the build actions
                                            Dim triggerItem As EnvDTE.ProjectItem
                                            For Each triggerItem In subsubItem.ProjectItems()
                                                'MsgBox(" trigger: " + triggerItem.Name)
                                                Dim buildAction As EnvDTE.Property
                                                buildAction = triggerItem.Properties.Item("DBProjectBuildAction")
    
                                                ' here we toggle the build action. If it was NotInBuild(0),
                                                ' we set it to Build(1). If it was Build(1), then we set it
                                                ' to NotInBuild(0).
                                                If (buildAction.Value = 0) Then
                                                    buildAction.Value = 1
                                                ElseIf (buildAction.Value = 1) Then
                                                    buildAction.Value = 0
                                                End If
                                            Next
                                        End If
                                    Next
                                End If
                            Next
                        End If
                    Next
                End If
            Next
        End Sub
    End Module
    

    A macro itera através de Sumário da solução até encontrar o projeto de banco de dados cujo nome corresponde ao nome que você especificou.Depois que a macro identifica esse projeto, ele itera sobre os itens de projeto, procurando a pasta solução Items.Na pasta solução Items, a macro aparência para a pasta tabelas e em que, a macro procura pasta Disparadores.A macro, em seguida, recupera o valor do DBProjectBuildAction propriedade para cada disparar.Se o valor for 1 (compilação), ela é alternada para 0 (não no Build).Da mesma forma, se o valor for 0, ela é alternada para 1.Embora o nome da propriedade no Propriedades janela é compilação Ação, o nome da propriedade subjacente é DBProjectcompilaçãoAction.

  3. Na janela macros, abra o Arquivo menu e clicar Salvar MyMacros.

    Em seguida, crie a macro que adiciona arquivos de script em um diretório para o projeto de banco de dados especificado.

Criar a Macro AddScriptsInDirectory

A macro AddScriptsInDirectory usa três parâmetros: o nome do projeto do banco de dados ao qual você deseja adicionar os arquivos de script, o nome da pasta em que o projeto de banco de dados onde você deseja adicionar os scripts e o caminho que o script contém os arquivos que a macro importará.Se você não especificar esses parâmetros ao executar a macro, ela será aviso você para eles.Se você não especificar o nome de uma pasta de projeto em resposta à mensagem, os arquivos serão adicionados para a pasta de scripts.

Essa macro é mais complexa do que o anterior.Para simplificar, criar a macro AddScriptsInDirectory criando duas funções a seguir e dois sub-rotinas:

  • Função IsFileIncluded Esta função verifica se a extensão de nome de arquivo especificado está na lista de extensões para arquivos que devem ser tratados sistema autônomo scripts e adicionados ao projeto de banco de dados.

  • Função GetOutputWindowPane Esta função retorna a janela de saída para que as mensagens de progresso podem ser informadas.

  • Sub-rotina AddScriptsInDirectory2 Essa sub-rotina faz uma pasta de projeto e um caminho e os adiciona todos os arquivos cujas extensões correspondem à lista de extensões de script.

  • Sub-rotina AddScriptsInDirectory A rotina de entrada para esta macro, essa sub-rotina processa os parâmetros que são passados para ele, executa a validação e cria a pasta de destino ou localiza-a projeto de banco de dados se a pasta já existe.A sub-rotina chama AddScriptsInDirectory2 para adicionar arquivos à pasta.

Para criar a macro AddScriptsInDirectory

  1. In Gerenciador de Macro, clicar com o botão direito do mouse no módulo ImportScriptsExample e clique em edição.

    The Macros do Microsoft Visual Studio janela é exibida.Esta janela mostra o Sumário do seu módulo ImportScriptsExample.

  2. Substitua o Sumário de módulo com o código VBScript a seguir:

    Imports System
    Imports EnvDTE
    Imports EnvDTE80
    Imports System.Diagnostics
    
    Public Module ImportScriptsExample
        ' A list of folder names, file names, and extensions that we want to add
        '  to the solution.
        Dim outputWindowPaneTitle As String = "Add scripts to a project folder report"
        Dim includedExtensions As New System.Collections.Specialized.StringCollection
    
        ' Function to filter out folder names, file names, and extensions that we do not 
        '  want to add to the solution.
        Function IsFileIncluded(ByVal filePath As String) As Boolean
            Dim extension As String
            Dim fileName As String
    
            extension = System.IO.Path.GetExtension(filePath)
            extension = extension.ToLower()
    
            fileName = System.IO.Path.GetFileName(filePath)
            fileName = fileName.ToLower()
    
            If (includedExtensions.Contains(extension)) Then
                Return True
            Else
                If (includedExtensions.Contains(fileName)) Then
                    Return True
                Else
                    Return False
                End If
            End If
        End Function
    
        ' This function retrieves the output window pane
        Function GetOutputWindowPane(ByVal Name As String, Optional ByVal show As Boolean = True) As OutputWindowPane
            Dim window As Window
            Dim outputWindow As OutputWindow
            Dim outputWindowPane As OutputWindowPane
    
            window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)
            If show Then window.Visible = True
            outputWindow = window.Object
            Try
                outputWindowPane = outputWindow.OutputWindowPanes.Item(Name)
            Catch e As System.Exception
                outputWindowPane = outputWindow.OutputWindowPanes.Add(Name)
            End Try
            outputWindowPane.Activate()
            Return outputWindowPane
        End Function
    
        ' Given a folder within the solution and a folder on disk, add all files whose extensions
        ' are on a list of "good" extensions to the folder in the solution.
        Sub AddScriptsInDirectory2(ByVal newScriptFolder As ProjectItem, ByVal startFolder As String)
            Dim files As String()
            Dim file As String
            Dim folder As String
    
            ' get a list of files in the specified folder
            files = System.IO.Directory.GetFiles(startFolder)
    
            ' get the output window pane so we can report status
            Dim outputWindowPane As EnvDTE.OutputWindowPane
            outputWindowPane = GetOutputWindowPane(outputWindowPaneTitle, True)
    
            ' Examine all the files within the folder.
            For Each file In files
                ' if this file's extension is one we want to include...
                If (IsFileIncluded(file)) Then
                    ' try to add it to the folder
                    Dim projItem As ProjectItem
                    Try
                        projItem = newScriptFolder.ProjectItems().AddFromFile(file)
                        outputWindowPane.OutputString("The item """ + file + """ was added" + vbLf)
    
                        If (Not (projItem Is Nothing)) Then
                            If (Not (projItem.Document Is Nothing)) Then
                                projItem.Document.Close(vsSaveChanges.vsSaveChangesNo)
                            End If
                        End If
                    Catch
                        ' if an error occurs, report the failure
                        outputWindowPane.OutputString("The item """ + file + """may have not been added to the solution." + vbLf)
                    End Try
                End If
            Next
        End Sub
    
        ' creates a new subfolder within the Scripts folder in the specified database project
        ' then adds all files in the specified path to the newly created scripts sub-folder.
        Sub AddScriptsInDirectory(Optional ByVal dbProjName As String = "", Optional ByVal scriptFolderName As String = "", Optional ByVal startFolder As String = "")
            If (String.IsNullOrEmpty(dbProjName)) Then
                dbProjName = InputBox("Type the name of the database project to which you want the scripts to be imported.")
                If (String.IsNullOrEmpty(dbProjName)) Then
                    Return
                End If
            End If
    
            If (String.IsNullOrEmpty(scriptFolderName)) Then
                scriptFolderName = InputBox("Type the script folder name.")
                If (String.IsNullOrEmpty(scriptFolderName)) Then
                    scriptFolderName = "Scripts"
                End If
            End If
    
            If (String.IsNullOrEmpty(startFolder)) Then
                startFolder = InputBox("Type the folder path to import.")
                If (String.IsNullOrEmpty(startFolder)) Then
                    Return
                End If
            End If
    
            If (System.IO.Directory.Exists(startFolder) = False) Then
                MsgBox("The specified folder could not be found.")
                Return
            End If
    
            GetOutputWindowPane(outputWindowPaneTitle, True).Clear()
    
            If System.IO.Directory.Exists(startFolder) = False Then
                Dim outputWindowPane As EnvDTE.OutputWindowPane
                outputWindowPane = GetOutputWindowPane(outputWindowPaneTitle, True)
                outputWindowPane.OutputString("The path entered could not be found" + vbLf)
                Exit Sub
            End If
    
            includedExtensions = New System.Collections.Specialized.StringCollection
            ' If you do not want a file with a particular extension or name
            '  to be added, then add that extension or name to this list:
            includedExtensions.Add(".sql")
            includedExtensions.Add(".tsql")
    
            Dim newScriptFolder As ProjectItem
            Dim project As Project
    
            ' now check to see if the desired folder in the project already exists
            For Each project In DTE.Solution
                Dim projectItem As EnvDTE.ProjectItem
    
                If (dbProjName.Equals(project.Name)) Then
                    Dim found As Boolean
                    found = False
                    For Each projectItem In project.ProjectItems()
                        If (scriptFolderName.Equals(projectItem.Name)) Then
                            ' the desired folder already exists, save the projectItem that corresponds
                            ' to the folder.
                            found = True
                            newScriptFolder = projectItem
                        End If
                    Next
    
                    ' if the folder does not exist within the project, create it.
                    If (Not found) Then
                        ' the folder does not already exist, so create it
                        newScriptFolder = project.ProjectItems().AddFolder(scriptFolderName, EnvDTE.Constants.vsProjectItemKindPhysicalFolder)
                    End If
                End If
            Next
    
            ' now add the scripts in the folder to the project folder
            AddScriptsInDirectory2(newScriptFolder, startFolder)
        End Sub
    End Module
    
  3. Na janela macros, abra o Arquivo menu e clicar Salvar MyMacros.

  4. Sobre o Arquivo menu, clicar Fechar e retornar.

    Em seguida, você executará suas macros para demonstrar os resultados.

Executar a Macro ToggleTriggers

Se você executar as macros com qualquer solução seja o que você criou neste passo-a-passo, você deve especificar o nome do projeto do banco de dados contido na sua solução em vez de MyAdvWorks.

Para executar a macro ToggleTriggers da janela Comando

  1. In O gerenciador de soluções, expandir o projeto de banco de dados MyAdvWorks.

  2. expandir a pasta de objetos de esquema.

  3. expandir a pasta de tabelas.

  4. expandir a pasta Disparadores.

  5. In O gerenciador de soluções, clicar com o botão direito do mouse em qualquer disparar e clique em Propriedades.

    Observe o valor do compilação Açãopropriedade para o acionador que você escolheu.

  6. Sobre o Modo de exibição , aponte para Outros Windowse clicar janela Comando.

    The janela Comando aparece.

  7. No Comando janela, digite o seguinte:

    Macros.MyMacros.BuildActionExample.ToggleTriggers MyAdvWorks
    

    MyAdvWorks é o nome do projeto de banco de dados que terá o Criar açãopropriedade seus disparadores alternado.

  8. Aguarde até que a macro para concluir.

  9. Quando a macro termina em execução, exiba as propriedades do disparar da etapa 5.

    O valor de compilação Ação propriedade é o oposto do que tinha antes de você executar a macro.

    Você pode executar a macro novamente restauração os valores do Criar açãopropriedade para seus estados originais.

    Em seguida você executar a macro AddScriptsInDirectory de Gerenciador de Macro.

Executar a Macro AddScriptsInDirectory

Se você executar as macros com qualquer solução seja o que você criou neste passo-a-passo, você deve especificar o nome do projeto do banco de dados contido na sua solução em vez de MyAdvWorks.

Para executar a macro AddScriptsInDirectory no Gerenciador de Macro

  1. If Gerenciador de Macro não estiver em aberto, abra o Modo de exibição , aponte para Outras janelase clicar Gerenciador de Macro.

    Gerenciador de Macro aparece.

  2. In Gerenciador de Macro, clicar com o botão direito do mouse em AddScriptsInDirectory (talvez seja necessário expandir o módulo ImportScriptsExample para exibir a macro) e clique em Executar.

    The Macros do Visual Studio caixa de diálogo será exibida, solicitando que você "Digite o nome do projeto do banco de dados para a qual você deseja que os scripts a serem importados."

  3. Digite MyAdvWorks e clicar OK.

    The Macros do Visual Studio caixa de diálogo será exibida novamente, solicitando que você "Digite o nome da pasta de script."

  4. clicar OK para aceitar o comportamento padrão, que adicionará os scripts para a pasta de scripts.

    The Macros do Visual Studio caixa de diálogo será exibida novamente, solicitando que você "Digite o caminho da pasta para importar."

  5. Digite o caminho onde você tem arquivos de script conforme observado na seção pré-requisitos ", anteriormente neste tópico.Por exemplo, se você tiver scripts em C:\Temp, digite C:\Temp e, em seguida, clicar OK.

    A macro será executada até que quaisquer arquivos que têm a extensão. SQL ou .tsql são adicionados para a pasta de scripts do projeto de banco de dados MyAdvWorks.

Próximas etapas

Esta explicação passo a passo ilustra pequenas Exemplos das tarefas que você pode executar ao usar o Visual Studio modelo de automação com seus projetos de banco de dados. Se precisar de mais flexibilidade, você poderá usar o modelo de automação de um Visual Studio suplemento.

Consulte também

Conceitos

Introdução a extensibilidade de projetos

Visão geral da terminologia do banco de dados edição

Outros recursos

Macros Visual Studio

Criando Adicionar-ins e assistentes

Assemblies de automação que faz referência e o objeto DTE2