Como podemos criar CLR para apagar um arquivo via SQL Server, neste post será demonstrado passo a passo de como fazer.
Primeiramente abra seu Visual Studio, feito isso, será necessário criar um novo projeto, para isso, siga os procedimentos descritos abaixo:
- Selecione a opção File -> New ->Project;
- Selecione a opção SQL Server -> SQL Server Database Project;
- Informe o nome do projeto que nesse caso é ‘DeleteFile’;
- Clique em ‘OK’.
As configurações devem estar conforme a imagem abaixo.
Pronto, criamos o projeto, agora será criada a classe que será responsável por deletar o arquivo via SQL Server.
Para criar a classe, siga os procedimentos descritos abaixo.
- Clique no nome do projeto com botão direito do mouse;
- Selecione a opção ‘Add’ -> ‘New Item…’
- Selecione a opção ‘SQL CLR C#’;
- Escolha a opção ‘SQL CLR C# User Defined Function’;
- Defina o nome, que nesse caso é ‘DeleteFile.cs’;
- Clique em ‘Add’.
As configurações devem estar conforme a imagem abaixo.
Pronto, classe foi criada com sucesso, agora será implementado o método responsável por deletar o arquivo.
O código da classe deverá ficar conforme o código abaixo.
[sourcecode language=”csharp”]
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
using System.IO;
public class DelFile
{
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlString FileDelete(SqlString Path)
{
try
{
if (!Path.IsNull)
{
File.Delete(Path.Value);
return "O arquivo " + Path.Value + " foi apagado com sucesso.";
}
else
{
return "Arquivo/Caminho não informado!!!";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
}
[/sourcecode]
Pronto, agora basta compilar e vamos adicionar nosso código no SQL Server.
Após conectarmos no SQL Server e selecionar qual base de dados utilizaremos será necessário alterar a opção ‘TRUSTWORTHY’, para isso, execute o código abaixo.
[sourcecode language=”sql”]
ALTER DATABASE T_SQL SET TRUSTWORTHY ON
GO
[/sourcecode]
Para saber um pouco mais sobre ‘TRUSTWORTHY’, leia o post do Luan no link a seguir: Porque Utilizar a Opção TRUSTWORTHY.
Agora será criado o assembly com o código que criamos no c#, para isso, execute o código abaixo, lembrando de alterar o diretório para o diretório que criou seu projeto.
[sourcecode language=”sql”]
CREATE ASSEMBLY DeleteFile
FROM ‘C:SQLServerDeleteFileDeleteFilebinDebugDeleteFile.dll’
WITH PERMISSION_SET = EXTERNAL_ACCESS
[/sourcecode]
Depois de criar o assembly deve-se criar a função que irá executar o assembly, conforme o código abaixo.
[sourcecode language=”sql”]
CREATE FUNCTION FN_FILEDELETE(@V_CAMINHO_ARQUIVO NVARCHAR(150))
RETURNS NVARCHAR(150) WITH EXECUTE AS CALLER
AS
EXTERNAL NAME DeleteFile.DelFile.FileDelete
GO
[/sourcecode]
Depois de criar todos os itens acima com sucesso, basta executar a Function que irá apagar o arquivo passado por parâmetro, conforme exemplo abaixo.
[sourcecode language=”sql”]
SELECT DBO.FN_FILEDELETE(‘C:SQLServerteste.txt’)
[/sourcecode]
Para o download do Projeto que foi criado, clique aqui.