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
Iniciar o Visual Studio Se ainda não tiver concluído isso.
No menu File, aponte para New, e em seguida, clique em Project.
A caixa de diálogo New Project será exibida.
No Tipos de projeto lista, expandir o Projetos de banco de dados nó e clicar Microsoft SQL servidor.
No Modelos clicar SQL servidor 2005.
In Nome, digite MyAdvWorks e aceitar os valores padrão de Local and Nome da solução.
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
Sobre o Modo de exibição menu, clicar Exibição esquema.
Exibição esquema será exibido se ele já não era visível.
clicar MyAdvWorks Exibição esquema.
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.
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.
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
Sobre o Modo de exibição , aponte para Outros Windowse clicar Gerenciador de Macro.
Gerenciador de Macro aparece.
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.
In Nome, digite BuildActionExample.
Clique em Adicionar.
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.
In Nome, digite ImportScriptsExample.
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
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.
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.
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
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.
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
Na janela macros, abra o Arquivo menu e clicar Salvar MyMacros.
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
In O gerenciador de soluções, expandir o projeto de banco de dados MyAdvWorks.
expandir a pasta de objetos de esquema.
expandir a pasta de tabelas.
expandir a pasta Disparadores.
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.
Sobre o Modo de exibição , aponte para Outros Windowse clicar janela Comando.
The janela Comando aparece.
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.
Aguarde até que a macro para concluir.
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
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.
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."
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."
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."
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