sexta-feira, 21 de setembro de 2018

Por que você pode querer usar CGI com C#?

O que é o CGI?

O Common Gateway Interface, ou CGI, é um padrão W3C de longa data para comunicação entre uma página da web e um aplicativo disponível no servidor web. Os aplicativos no servidor que se comunicam no CGI têm todas as funcionalidades de qualquer outro aplicativo nativo, como acesso ao banco de dados ou leitura de arquivos de entrada. No entanto, no mundo atual, com ASP.NET, PHP, Perl e muitas outras linguagens de script que fornecem essencialmente a mesma funcionalidade, você pode se perguntar por que se incomodaria em criar seu próprio aplicativo CGI com C #. Existem algumas razões que posso pensar que podem ser aplicadas.

Motivo 1

Primeiro, os interpretadores para ASP, PHP, Perl, etc. são essencialmente aplicativos aproveitando o CGI. Em muitos casos, eles são criados diretamente no serviço da Web (como com ISAPI para IIS), mas todos eles também estão disponíveis em suas aparências CGI (ASP disponível como CGI por meio do projeto Mono da Novel). Para entender melhor os recursos e a limitação da sua linguagem de script favorita do servidor, você pode estar interessado em saber como ela funciona em um nível inferior.

Motivo 2

Outra razão é que você pode escrever seu próprio intérprete de mini-scripts. Linguagens como ASP são de propósito geral e, embora possam fazer qualquer coisa, algumas coisas poderiam ser melhor realizadas com um script de propósito mais específico.

Por exemplo, isso descreve a razão pela qual eu investiguei pela primeira vez o reino de CGI e C#. Minha empresa tem uma demanda muito alta por relatórios. Apesar de uma ampla gama de ferramentas disponíveis para os funcionários, o site continua sendo o principal recurso para seus relatórios personalizados devido a muitas viagens. Todos os relatórios têm uma variedade de requisitos gráficos muito exigentes, desde formatação, até gráficos, até o fornecimento de uma pasta de trabalho do Excel gerada dinamicamente. O código ASP estava começando a parecer assustador, então criamos um aplicativo C# personalizado para interpretar uma linguagem de relatório tão específica às necessidades de nossos negócios que até mesmo usuários avançados não programadores podem ajudar na criação e modificação das necessidades de relatórios. (Um tópico para outro artigo? diz que sim no comentário.)

Motivo 3

Outro benefício para CGI é que ele é agnóstico do servidor web. O mesmo executável funcionará para o IIS como para o Apache, como para qualquer outro servidor da Web compatível com o W3C. E, ao contrário de algumas linguagens de script, o executável é compilado para que a execução seja rápida e a origem não esteja visível.

C# é uma excelente linguagem para usar com CGI por causa do poder do .NET framework. Também é possível testar um aplicativo C# utilizando CGI, mesmo sem um servidor da Web, porque ele simplesmente é executado como um aplicativo de console. Mais sobre isso depois.

Motivo 4

Finalmente, existem provedores de serviços da Web que permitem usar aplicativos CGI personalizados que podem não permitir o uso de módulos Apache ou ISAPI IIS DLLs. O motivo é que um módulo integrado em um servidor da Web pode causar muito mais danos ao servidor da Web do que um executável separado e controlável.

Gostou? Comenta o que mais te interessou!


terça-feira, 4 de setembro de 2018

Como ignorar letras acentuadas na comparação de string no C# e SQL?

Ignorar acentos no C#

Para ignorar acentos, maiúsculas e minúsculas, você pode primeiro definir um método de extensão como este:

public static string RemoveAcentos(this String s)
    {
        String normalizedString = s.Normalize(NormalizationForm.FormD);
        StringBuilder stringBuilder = new StringBuilder();

        for (int i = 0; i < normalizedString.Length; i++)
        {
            Char c = normalizedString[i];
            if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
                stringBuilder.Append(c);
        }

        return stringBuilder.ToString().ToLower();
    }

Exemplo 1

            string valor = "pãO 10 Grãos".RemoveAcentos();

            if (valor == "Pão 10 Grãos".RemoveAcentos())
            {
                 // instruções
                Console.WriteLine("Iguais");
            }
            else
            {
                 // instruções                 Console.WriteLine("Diferentes");
             }

Exemplo 2

             string queryText = filter.ToUpper().RemoveDiacritics();

             var result = from p in Produtos
                      where p.Nome.ToUpper().RemoveAcentos() == queryText
                      select p;

Ignorar acentos no SQL

O nosso método, no exemplo 2, é bom se estamos apenas iterando sobre uma colecção no C#, mas se você estiver usando LINQ para SQL é preferível evitar métodos não padrão (incluindo métodos de extensão) em sua consulta LINQ. Isso ocorre porque seu código não pode ser convertido em SQL válido e, portanto, executado no SQL Server com toda a optimização de desempenho.
Como não parece haver uma maneira padrão de ignorar os acentos no LINQ para SQL, nesse caso, sugiro alterar o tipo de campo que você deseja pesquisar para não diferenciar maiúsculas e minúsculas (CI_AI):

ALTER TABLE Produtos ALTER COLUMN Nome [varchar](100) COLLATE SQL_Latin1_General_CP1_CI_AI

Sua consulta deve agora ignorar a acentuação e o caso.

É importante que você deve remover temporariamente quaisquer restrições exclusivas no campo antes de executar a consulta acima usando, por exemplo, a seguinte instrução:

ALTER TABLE People DROP CONSTRAINT UQ_Produtos_Nome

Agora a nossa consulta LINQ será simplificada:

var result = from p in Produtos
         where p.Nome == filter
         select p;

Espero ter ajudado.



Pesquisar neste blogue

Com tecnologia do Blogger.

Páginas