Inquiridor
Função não é criada no SQL Server 2008 utilizando CLR Integration, como posso resolver ?

Pergunta
-
Criei a classe abaixo no Visual Studio 2010 utilizando o template Class Library.
using System; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.IO; using Microsoft.SqlServer.Server; namespace ExportandoImagemBanco { public sealed class ExportarImagem { [SqlFunction()] public static SqlBoolean Exportar(SqlString nomeArquivo, SqlString caminhoArquivo, SqlBinary conteudoArquivo) { SqlBoolean retorno = new SqlBoolean(false); try { if (!conteudoArquivo.IsNull) { FileStream arquivo = new FileStream(string.Format("{0}\\{1}", caminhoArquivo, nomeArquivo), FileMode.Create, FileAccess.Write); arquivo.Write(conteudoArquivo.Value, 0, conteudoArquivo.Value.Length); arquivo.Flush(); arquivo.Close(); retorno = true; } } catch (Exception) { retorno = false; } return retorno; } private ExportarImagem() { } } }
No SQL Server 2008 criei os seguintes scripts.
CREATE ASSEMBLY [ExportandoImagemBanco] FROM 'C:\ExportandoImagemBanco.dll' WITH PERMISSION_SET = SAFE CREATE FUNCTION [dbo].[Exportar](@P_NOME_ARQUIVO VARCHAR(100), @P_CAMINHO_ARQUIVO VARCHAR(1000), @P_CONTEUDO_ARQUIVO VARBINARY) RETURNS BIT AS EXTERNAL NAME [ExportandoImagemBanco].[ExportarImagem].[Exportar];
O problema é que a função não é criada, da a seguinte mensagem de erro.
Mensagem 6505, Nível 16, Estado 2, Procedimento Exportar, Linha 1
Could not find Type 'ExportarImagem' in assembly 'ExportandoImagemBanco'Será que estou fazendo alguma coisa errada, como posso resolver isso, abraços ?
Todas as Respostas
-
Toni,
A mensagem de erro esta alertando que não encontrou o Tipo "ExportarImagem" no Assembly "ExportandoImagemBanco".
Altere o Permission_Set para External_Access.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
-
Junior,
Obrigado pela sua colaboração, fiz o que você falou, agora foi exibido uma outra mensagem de erro.
Mensagem 10327, Nível 14, Estado 1, Linha 1
CREATE ASSEMBLY for assembly 'ExportandoImagemBanco' failed because assembly 'ExportandoImagemBanco' is not authorized for PERMISSION_SET = EXTERNAL_ACCESS. The assembly is authorized when either of the following is true: the database owner (DBO) has EXTERNAL ACCESS ASSEMBLY permission and the database has the TRUSTWORTHY database property on; or the assembly is signed with a certificate or an asymmetric key that has a corresponding login with EXTERNAL ACCESS ASSEMBLY permission.
-
Toni,
Certo, a mudança da forma de controle de acesso externo requer algumas alterações de permissões.
Nas permissões de acesso do seu banco de dados, liberando o acesso externo para o seu banco de dados, utilize:
ALTER DATABASE SeuBacno SET TRUSTWORTHY ON
Além disso, o usuário que você utilizar no processo de acesso externo deverá fazer parte da Server Role Sysadmin.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
- Editado Junior Galvão - MVPMVP terça-feira, 13 de novembro de 2012 16:38
- Sugerido como Resposta Junior Galvão - MVPMVP segunda-feira, 17 de fevereiro de 2020 14:42
-