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

  • 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 ?

    terça-feira, 13 de novembro de 2012 13:31

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]

    terça-feira, 13 de novembro de 2012 13:46
  • 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.

    terça-feira, 13 de novembro de 2012 13:53
  • 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]


    terça-feira, 13 de novembro de 2012 16:36
  • Junior,

    Desculpe a demora em responder, fiquei agarrado em outros projetos, correu tudo bem, sua resposta foi valiosa, obrigado.

    sexta-feira, 7 de dezembro de 2012 19:55