Você está na página 1de 6

1

GERANDO ARQUIVOS XML DIRETO DO SQL SERVER E SALVANDO EM DIRETRIO.


por Fernando Datorre Muitas vezes queremos que nossas aplicaes se comuniquem com outras aplicaes, nossas ou de terceiros. Para resumir o assunto, o que farei uma maneira de seu banco de dados gerar automaticamente um arquivo .xml que pode ser facilmente lido por qualquer aplicao, sua ou de outra pessoa/empresa. Neste tpico abordaremos: Criao do arquivo .dll no Visual Studio; Registro do Assembly no SQL Server; Criao de Stored Procedure; Criao de Trigger.

VISUAL STUDIO CRIAO DO ARQUIVO .DLL


O primeiro passo que precisamos executar criar a dll que far o trabalho de escrita em disco dos dados gerados em xml, abra o Visual Studio (Estou usando o 2010, mas pode ser o 2005, 2008 ou 2010, inclusive as verso express que so gratuitas). Com o Visual Studio Aberto, selecione New Project e na tela abaixo que se abrir, selecione a verso do .net Framework como 2.0, escolha o tipo Class Library na linguagem que voc preferir e para finalizar, escolha o diretrio de destino. Exemplo:

Depois de criado o projeto, o Visual Studio mostrar a classe bsica criada.

Vamos trocar o nome da classe para um nome mais adequado e adicionar as refrencias necessrias, alm do cdigo que executar a gravao do arquivo em seu disco. Ficar assim:
using System; using System.IO; //Manipulao de arquivos em disco using Microsoft.SqlServer.Server;//interoperabilidade com o SQL Server /// <summary> /// Classe responsvel pela gravao do arquivo /// Fernando Datorre Abril 2011 /// </summary> public class GravaXml { [Microsoft.SqlServer.Server.SqlProcedure] public static void Escrever(String conteudo, String arquivo) { try { File.WriteAllText(arquivo, conteudo); } catch (Exception ex) { SqlContext.Pipe.Send("Erro ao Gravar o Arquivo " + ex.Message); } } }

Compilando o projeto (Ctrl+F5), o arquivo dll ser gerado na pasta informada:

Muito bem, nosso trabalho no Visual Studio est pronto, vamos ao SQL server.

SQL SERVER Crie ou use um banco de dados no SQL Server (usarei o 2005). No meu exemplo, tenho um banco simples e uma tabela com 3 campos:

Agora vamos registrar a dll criada anteriormente. Execute o cdigo abaixo para registrar a dll e dar direito de uso:
exec sp_configure 'clr enabled',1 reconfigure go alter database BancoTeste set trustworthy on go use BancoTeste go create assembly TutorialGravarXml from 'D:\Tutorial\TutorialGravarXml\TutorialGravarXml\bin\Debug\TutorialGravarXml.dll' with permission_set = external_access

Agora que a dll foi importada, criaremos uma Stored procedure que nos permitir a execuo dos mtodos da dll: STORED PROCEDURES
--cria a stored procedure que executar a dll create procedure tutorialGravarXml ( --aqui passamos os parmetros do mtodo que criamos @conteudo nvarchar(max), @arquivo nvarchar(255) ) as external name TutorialGravarXml.GravaXml.Escrever

Criaremos agora uma Stored Procedure simples que selecionar os dados da tabela Clientes. Esta procedure gerar o arquivo xml da consulta e passar para a dll executar.
-- =============================================== -- Author: Fernando Datorre -- Create date: 03/05/2011 01:15 -- Description: Lista os clientes, -Gera o arquivo XML e executa a dll -- =============================================== CREATE PROCEDURE ListarClientes AS BEGIN declare @xml nvarchar(max) set @xml = ( select ID, Nome, DataUltimaCompra from Clientes For XML AUTO,ELEMENTS) --indique o arquivo que ser executado, -- o texto xml e o arquivo de sada exec TutorialGravarXml @xml,'C:\Temp\Clientes.xml' END

Ao trmino dessas etapas, teremos a seguinte estrututura:

TRIGGER Para finalizar, vamos criar uma trigger que executar nossa procedure e gravar o arquivo xml:
-- ====================================================== -- Author: Fernando Datorre -- Create date: 03/05/2011 01:122 -- Description: triger que disparada quando a -tabela clientes sofre uma incluso -ou alterao. ela executa a procedure -que executa a dll para gravar o arquivo -- ====================================================== CREATE TRIGGER [dbo].[TRGerarXmlClientes] ON [dbo].[Clientes] FOR INSERT, UPDATE, DELETE as exec ListarClientes GO

Pronto! Nossos passoas terminaram. Agora reallizar os testes: Nossa pasta C:\temp inicialmente:

Depois de um update: update Clientes set DataUltimaCompra = getdate() where ID = 1

Contedo:

Testando uma incluso


Insert Clientes (Nome, DataUltimaCompra) Values ('Barney Rubble', getdate())

Bem, por hora s. claro que fiz um exemplo simples, mas tentei mostrar como podemos explorar as integraes entre as ferramentas e economizar muito trabalho em determinados projetos. Espero que seja til. Abraos e at a prxima. Fernando Datorre Microsoft .Net C# Architect Simple Software Consultoria http://datorre.posterous.com/ "Se voc no luta pelo que quer, no merece o que deseja."

Você também pode gostar