Desenvolvendo componentes COM+ com .NET

Quando se trabalha com .NET em sistemas mistos com plataformas legadas, como ASP Classic, VB, VBScript, Delphi ou até mesmo Ole Automation do SQL Server, o .NET ainda permite interoperabilidade com estes sistemas por meio de componentes COM+, seja o .NET consumindo COM+ ou a plataforma legada consumindo um COM+ desenvolvido em .NET.

Como existem poucos artigos em português para explicar como desenvolver COM+ com .NET, procurei a demonstrar a criação de componente simples com C# no Visual Studio 2010.

Para a criação do componente, utilizei um projeto do tipo Class Library:

A este projeto adicionei referência à System.EnterpriseServices:

Nas propriedades do projeto, editei a “Assembly Information”,

especificando o Assembly como COM-Visible:

De acordo com a plataforma do sistema legado (x64, x86) que o COM+ irá trabalhar, defini esta em Plataform target:

Obs.: Esta opção é muito importante, pois é muito comum criar um componente em x64 e este não ser visível para uma aplicação VB x86, assim como tentar criar componentes x86 para tentar acessar por um VBScript que será executado em uma plataforma x64.

Por fim, criei uma chave “strong name” para o projeto:

Para uma classe .NET ser considerada componente, ela deverá ser herdada de System.EnterpriseServices.ServicedComponent, conforme abaixo, onde temos uma classe simples cujo o seu único método retorna um texto:

using System.EnterpriseServices;

namespace DemoCom
{
    public class Objeto : ServicedComponent
    {
        public string Teste()
        {
            return "Demo COM+ //By SQL From Hell";
        }
    }
}

Após realizar o build do projeto, utilizei o regsvcs de acordo com a plataforma x86/x64 e versão da .NET Framework do projeto, informando o caminho do seu assembly (DLL) onde esta “$(TargetPath)”.

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe $(TargetPath)

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs.exe $(TargetPath)

Após a instalação do componente, este será visível na relação de COM+ Applications no Component Services:

Para testar o COM+, utilizarei um VBScript simples:

Dim obj
Set obj = CreateObject("DemoCom.Objeto")
MsgBox obj.Teste

Também sendo possível por Ole Automation do SQL Server:

DECLARE @obj INT

DECLARE @return INT, @text NVARCHAR(4000)

-- Criando a 'instância' do componentes

EXEC @return = sp_OACreate 'DemoCom.Objeto', @obj OUT

-- Verificando se a chamada obteve sucesso.

IF @return = 0 PRINT 'COM: OK'

-- Chamando o método Teste

EXEC @return = sp_OAMethod @obj, 'Teste', @text OUT

IF @return = 0 PRINT 'Teste: OK'

PRINT 'Resultado: ' + @text

E por fim, para desinstalar o componente, bastará utilizar o mesmo regsvcs informando “/u”.

C:\Windows\Microsoft.NET\Framework\v4.0.30319\regsvcs.exe /u $(TargetPath)

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regsvcs.exe /u $(TargetPath)

Artigos relacionados:

Acessando dados de Web Service com Ole Automation Procedures

Visual Studio 2010 – Data Compare

Dando sequência ao artigo anterior, vamos á comparação de dados entre dois bancos de dados com o Visual Studio 2010 Premium ou Ultimate e também entender como ajustar o script gerado pelas ferramentas Data e Schema Compare.

Também no menu Data do Visual Studio, temos a opção “New Data Comparison”:

Informamos os bancos de dados a serem comparados:

Na próxima tela informamos as tabelas e visões a serem comparadas:

Obs.: Lembre-se que se não houver uma chave única ou primária entre as tabelas, não será possível compará-las.

Obs.: Comparações em bancos de dados de produção podem levar muito tempo ou prejudicar o desempenho, então defina bem o escopo dos dados e em que momento esta operação será realizada.

Processo de comparação concluído, temos as diferenças entre os dados dos dois bancos de dados, onde na primeira aba teremos os dados com mesma chave e valores diferentes:

Na segunda aba, o que só estão no banco Source e serão adicionados no Target (se não desmarcados):

Na Terceira, os que somente estão no Target e serão excluídos:

Por fim, registros iguais ou semelhantes:

Após informar o que irá ou não ser replicado para o banco de dados Target, aplique as alterações:

Ou abra o script para edição:

Permitindo ajustar o script de forma a evitar qualquer conflito não resolvido pelas ferramentas Data e Schema Compare:

Com estas funcionalidades de comparações estruturais e de dados, o Visual Studio começa ganhar importância não somente para os desenvolvedores e testers, mas também para os DBAs.

Espero que estas duas features estejam presentes nos próximos SQL Server Management Studio!

Visual Studio 2010 – Schema Compare

Logo vão lançar mais uma versão do Visual Studio (possível 2012), e eu ainda não tinha nada escrito sobre o Schema Compare e Data Compare.

Então, vamos conhecer esta ferramenta! As versões Premium e Ultimate do Visual Studio 2010 tem duas ferramentas para comparar bancos de dados, uma em questão estrutural, outra em questão de dados, bem úteis para acompanhar as mudanças dos bancos de dados em ambientes de desenvolvimento e produção, além de outras atividades do dia-a-dia dos DBAs.

Se você esta trabalhando com o Visual Studio 2008 Team System, é possível utilizar o Schema/Data Compara com a instalação do “Visual Studio Team System 2008 Database Edition GDR R2”:
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed

Neste primeiro artigo, vamos conhecer o Schema Compare, que compara dois bancos de dados a nível estrutural.

No menu Data, temos a opção New Schema Comparison:

Na tela seguinte, informaremos os bancos de dados a serem comparados, e também será possível definir alguns critérios para comparação (Options):

Configure ou escolha os bancos de dados a serem comparados:

E do lado esquerdo (Source) deixe o banco de dados cuja estrutura será aplicada sobre o banco de dados informado ao lado direito (Target):

Após prosseguir com as configurações, teremos como resultado uma tela que mostra as semelhanças e diferenças dentre estes os dois bancos de dados:

Onde tiver Update Action como “Skip”, serão estruturas que não podem ser alteradas ou que já estão de acordo com o banco de dados Source.

No caso da Update Action “Create”, as estruturas a serem criadas, e “Drop”, as estruturas a serem excluídas.

Clicando sobre a Update Action entre as comprarações, será possível ignorar a comparação informando “Skip”.

Também é possível filtrar para somente as estruturas com Update Action diferentes, iguais ou que não serão ignoradas (Non Skip) sejam exibidas:

Repare que até mesmo SQL Files são comparados, então para evitar conflitos ou problemas por causa desta comparação, marque os SQL Files como “Skip”:

Por fim, aplique as alterações sobre o banco de dados Target:

Alterações aplicadas, ainda tem estruturas diferentes aparecendo?

Clique em Refresh, para o Visual Studio realizar uma nova comparação entre as estruturas:

Simples, prático e com pouca complexidade, Schema Compare agora é mais um ótimo recurso para o dia-a-dia dos DBAs!

Para operações de comparação mais complexas, recomendo utilizar a opção “Export To Editor” e ajustar o script de comparação, evitando conflitos.