AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 81277
Accepted
wBob
wBob
Asked: 2014-10-29 04:26:01 +0800 CST2014-10-29 04:26:01 +0800 CST 2014-10-29 04:26:01 +0800 CST

Montagem 'system.web, versão=4.0.0.0, cultura=neutra, publickeytoken=b03f5f7f11d50a3a.' não foi encontrado no catálogo SQL

  • 772

Estou tentando implantar uma função SQL CLR usando o método HTTPUtility.UrlDecode de System.Web, mas não consigo implantá-la. Erro recebido:

Provedor de Dados .Net SqlClient: Msg 6503, Nível 16, Estado 12, Linha 1 Assembly 'system.web, versão=4.0.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a.' não foi encontrado no catálogo SQL.

A função (como parte do projeto SSDT):

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction(IsDeterministic = true)]
    public static SqlString udf_UrlDecode(SqlString encodedXML)
    {
        string decodedXML;

        decodedXML = HttpUtility.UrlDecode(encodedXML.ToString());

        return new SqlString(decodedXML);
    }
}

É em relação a este tópico . Sou SQL Server 2014 com VS2012 SSDT e Projeto de Banco de Dados. Já tentei com outros Target Frameworks, por exemplo, 3, 3.5, 4 e 4.5.

Eu também tentei CREATE ASSEMBLY com System.Web, mas depois tenho que adicionar outros assemblies, por exemplo, Microsoft.Build, System.Xaml até que eles também falhem. Vejo que o System.Web não está na lista de bibliotecas com suporte , então alguma ideia?

sql-server sql-server-2014
  • 3 3 respostas
  • 19305 Views

3 respostas

  • Voted
  1. Best Answer
    Solomon Rutzky
    2014-10-29T06:26:15+08:002014-10-29T06:26:15+08:00

    Você pode usar Uri.UnescapeDataString (em System), caso em que também precisará fazer um Replace('+', ' ')na string antes de passá-la para Uri.UnescapeDataString, ou se preferir não se preocupar com isso, esta função está disponível na versão gratuita do SQL# (do qual sou o autor).

    Importar System.Webé provavelmente mais trabalho do que vale a pena. E, de fato, pode ser arriscado. Há um bom motivo para System.Webnão estar na lista de "Bibliotecas suportadas" à qual você vinculou na pergunta: não é garantido que funcione! Você pode se deparar com situações, especialmente ao lidar com conjuntos de caracteres ASCII não americanos, que não se comportam conforme o esperado e a Microsoft não corrigirá isso. Portanto, a menos que seja absolutamente necessário, você deve ter cuidado ao adicionar DLLs não suportadas. As DLLs na lista "compatível" foram totalmente testadas e verificadas para funcionar com agrupamentos do SQL Server e quaisquer outros problemas ambientais que sejam diferentes entre o CLR padrão em execução no Windows e o CLR em execução no SQL Server.

    Aqui estão alguns recursos adicionais da Microsoft sobre várias armadilhas para incorporar bibliotecas .NET Framework sem suporte:

    • Política de suporte para assemblies .NET Framework não testados no ambiente hospedado no SQL Server CLR

    • Mensagem de erro ao executar uma rotina CLR ou usar um assembly no SQL Server: "O assembly no armazenamento do host tem uma assinatura diferente do assembly no GAC. (Exceção de HRESULT: 0x80131050)"


    Algumas notas sobre o seu código:

    1. Por favor, não use tipos .NET para parâmetros, entrada ou saída. Portanto, mude string encodedXMLpara ser SqlString encodedXML.
    2. Esta função é determinística, portanto, deve ser marcada como tal, caso contrário, você sofrerá um impacto no desempenho. Adicione IsDeterministic = trueao SqlFunctionatributo.
    • 9
  2. Thomas Stringer
    2014-10-29T06:21:57+08:002014-10-29T06:21:57+08:00

    Como você observou, System.Webé uma biblioteca sem suporte. Para fazer referência System.Web, você precisará fazer uma chamada para CREATE ASSEMBLY. Parece que você tentou isso, mas como você referenciou a localização de System.Web.dll? Você copiou / colou em um local diferente? O SQL Server tentará localizar assemblies dependentes no mesmo local. Em outras palavras, se você referenciar a localização de System.Web.dlltodas as outras bibliotecas dependentes que vivem no mesmo diretório, deve funcionar bem. Aqui está um exemplo de trabalho. Consegui adicionar tanto o System.Webassembly quanto o seu assembly:

    create assembly [System.Web]
    from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
    with permission_set = unsafe;
    go
    
    create assembly SystemWebTest
    from 'c:\SqlServer\SystemWebTest.dll'
    with permission_set = safe;
    go
    

    Você pode ver nas mensagens do cliente todos os outros assemblies carregados pelo SQL Server. Mas observe que o SQL Server exibe o seguinte aviso para cada um deles:

    que você está registrando não foi totalmente testado no ambiente hospedado do SQL Server e não é suportado. No futuro, se você atualizar ou reparar este assembly ou o .NET Framework, sua rotina de integração CLR pode parar de funcionar. Consulte os Manuais Online do SQL Server para obter mais detalhes.

    Da mesma forma, mas adicionando System.Web, observe os seguintes assemblies adicionados:

    select
        name,
        permission_set_desc,
        is_visible
    from sys.assemblies
    where is_user_defined = 1
    order by is_visible desc;
    
    name                                            permission_set_desc is_visible
    System.Web                                      UNSAFE_ACCESS       1
    SystemWebTest                                   SAFE_ACCESS         1
    Microsoft.Build.Framework                       UNSAFE_ACCESS       0
    System.Xaml                                     UNSAFE_ACCESS       0
    System.ComponentModel.DataAnnotations           UNSAFE_ACCESS       0
    System.Runtime.Caching                          UNSAFE_ACCESS       0
    System.Web.ApplicationServices                  UNSAFE_ACCESS       0
    System.Drawing                                  UNSAFE_ACCESS       0
    Microsoft.Build.Utilities.v4.0                  UNSAFE_ACCESS       0
    System.DirectoryServices                        UNSAFE_ACCESS       0
    System.DirectoryServices.Protocols              UNSAFE_ACCESS       0
    System.EnterpriseServices                       UNSAFE_ACCESS       0
    System.Runtime.Remoting                         UNSAFE_ACCESS       0
    System.Runtime.Serialization.Formatters.Soap    UNSAFE_ACCESS       0
    System.Design                                   UNSAFE_ACCESS       0
    System.Windows.Forms                            UNSAFE_ACCESS       0
    Accessibility                                   UNSAFE_ACCESS       0
    System.Drawing.Design                           UNSAFE_ACCESS       0
    System.Web.RegularExpressions                   UNSAFE_ACCESS       0
    Microsoft.Build.Tasks.v4.0                      UNSAFE_ACCESS       0
    System.ServiceProcess                           UNSAFE_ACCESS       0
    System.Configuration.Install                    UNSAFE_ACCESS       0
    System.Runtime.Serialization                    UNSAFE_ACCESS       0
    System.ServiceModel.Internals                   UNSAFE_ACCESS       0
    SMDiagnostics                                   UNSAFE_ACCESS       0
    

    Vale a pena estar atento ao que realmente está acontecendo aqui e, embora os outros assemblies adicionais não tenham maneiras de pontos de entrada do T-SQL, eles agora são uma dependência. Eu pesaria as opções para ver se você realmente precisa referenciarSystem.Web , ou se existe outra rota para realizar o que deseja.

    • 8
  3. skeletank
    2015-02-04T06:24:30+08:002015-02-04T06:24:30+08:00

    Confira esta resposta . Você não precisa usar Uri.UnescapeDataStringou System.Web. Existe uma classe chamada WebUtilitydentro de System.Netcom as funções HtmlEncodee HtmlDecode.

    • 5

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve