Introdução

Os legados na área de TI leva você a atualizar coisas antigas para as novas. Você desenvolvedor do mercado de trabalho, já teve que transformar algum código de VB 6 para C#? É isso que estou fazendo no momento, e jogando fora as coisas antigas. Aqui eu vou mostrar como fazer um select com replace de um atributo do banco de dados que guarda valores com aspas duplas.

Explicando o problema

Talvez no seu trabalho tenha aquele código antigo cujo ninguém mais mexe ou dá manutenção para melhorar o desempenho do sistema ou arrumar algum bug. O código antigo que estou transformando foi escrito em VB 6.0 e o problema é a forma que foi escolhido para armazenar informações no banco de dados. O VB 6 trabalha com aspas duplas (“) e o C# trabalha com aspas simples (') para valores dentro de uma “string”. Por exemplo: string _nome = “ 'Mauricio Junior', ’31' ”; enquanto que o VB utiliza aspas duas: _nome = “ "Mauricio Junior", “31” “. 
Dentro do atributo (campo) e dentro da tabela do banco de dados são gravados com as aspas duplas. Não é um padrão gravar isso no banco de dados, seria melhor utilizar um separador entre os valores ou fazer a inserção de dados sem aspas. Outro problema é que não pode ser dado update no banco de dados, tenho que deixar como está.

Para resolver esse problema, o melhor é fazer um select com o comando REPLACE, ou seja, no momento de execução, os dados serão alterados e serão retornados corretamente, com aspas simples ou sem aspas. Os dados estão juntos, isso mesmo, estão juntos no mesmo campo e parados por um espaço simples. Por exemplo: nome = “Mauricio Junior” idade = “31" peso = “68" salario = “1.000,00”. 

O objetivo desse documento é mostrar como fazer um select com o comando replace e ao mesmo tempo separar os dados com algum símbolo especial para melhor localizar o valor usando a linguagem C#. Veja a referência 1.

Referência 1 - Mostrando select simples e com replace

O select normal é bem simples:
SELECT Campo FROM Tabela ORDER BY Campo;

Para mudar os valores do campo acima, é necessário fazer um REPLACE:
SELECT REPLACE(Campo), '"','''') as Campo FROM Tabela ORDER BY Campo;

O comando REPLACE funciona da seguinte maneira: o primeiro passo é colocar o comando e abrir parênteses. O primeiro valor depois do parênteses é o próprio atributo do banco (campo). Agora é necessário indicar ao select o que precisa ser substituído, ou seja, o que está gravado dentro do banco de dados. No nosso caso, as aspas duplas. A última vírgula indica no nosso exemplo o valor que será substituído em todos os dados gravados no banco. No nosso caso, as aspas simples. Essa troca será em tempo de execução, pois os dados ficarão intactos. 

Para recaptular o comando basta colocar o objeto, valor que está dentro da coluna e o valor que será substituído. Nesse campos, as aspas duplas por aspas simples.

Bom, até ai tudo bem porque o campo pode ser facilmente alterado. O problema é que o tipo do campo é Text. Um modelo bem antigo utilizado. O banco de dados aqui é um SQL Server 2008 e o comando REPLACE não funciona em campos do tipo Text. É necessário fazer além de tudo uma conversão do tipo de dado. Passar de Text para Varchar. É necessário fazer outra transformação para a mudança de valores em tempo de execução. Uma conversão do campo em tempo de execução também é permitido nesses casos.  Veja a referência 2:

Referência 2 - Mostrando select e convert simples.

SELECT REPLACE(CONVERT(VARCHAR(MAX), Campo), '"','''') as Campo FROM Tabela ORDER BY Campo;

O primeiro passo é converter o campo para varchar máximo e depois fazer o replace das aspas. O código começa a executar de dentro para fora, por isso executa primeiro a conversão para depois a mudança com o replace. 

Se você está passando pelo mesmo problema, execute esses passos que vai funcionar. Espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site www.mauriciojunior.org.