Quebra de linhas no script de comando do ASP.NET

02/03/2018

0

Olá pessoal, estou trabalhando em um projeto ASP.NET e me deparei com o seguinte problema:

Dentro da minha instrução:
SqlConnection, eu defino que a minha String seja uma consulta do banco SqlServer...

Porem a consulta é muito grande e fica extensa demais para colocar em uma unica linha dentro desse comando.

A pergunta é como eu faço para quebrar a linha e continuar a instrução na linha abaixo?

Ex:

Numa consulta simples fica assim
String cmd = "Select * From BD_DESENV.dbo.CLIENTES"

Mas uma quebrando para inserir o "Where" na linha de baixo como eu faria.

Obrigado desde já pela ajuda.
Bruno Andriolli
Bruno Andriolli

Bruno Andriolli

Responder

Post mais votado

06/03/2018

Brother me desculpe pela falta de atenção, mas para concatenar em C# você deve usar o + (adição) e não & (usado no VB, access e vba).

É que estas semanas estou sofrendo com uma bosta de sistema antigo em VB 6 que tenho de migrar, por isso postei o sinal de concatenação, então mais uma vez me desculpe.

Existem várias formas de obter o resultado que você quer, veja:

         string cmd = "DECLARE @DATAINI DATE, @DATAFIM DATE SET @DATAINI = CONVERT(DATE,DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)) SET @DATAFIM = CONVERT(DATE,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,-1))";
            cmd += " Select CC.CARTEIRA,";
            cmd += " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'SISTEMASTH' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS SISTEMASTH,";
            cmd += " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'NOVA VIDA' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS NOVAVIDA,";
            cmd += " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'UNITFOUR' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS UNIT4,";
            cmd += " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'LEMIT' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS LEMIT,";
            cmd += " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS TOTAL ";
            cmd += " FROM BI.DBO.CARTEIRAS CC With (Nolock) ";
            cmd += " Where (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) <> 0 ORDER BY CC.CARTEIRA ASC";


            var s = @"
            DECLARE @DATAINI DATE, @DATAFIM DATE SET @DATAINI = CONVERT(DATE, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0)) SET @DATAFIM = CONVERT(DATE, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 1, -1))
            Select CC.CARTEIRA,         
            (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'SISTEMASTH' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS SISTEMASTH,
            (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'NOVA VIDA' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS NOVAVIDA,
            (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'UNITFOUR' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS UNIT4,
            (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'LEMIT' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS LEMIT,
            (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS TOTAL 
            FROM BI.DBO.CARTEIRAS CC With (Nolock) 
            Where (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) <> 0 ORDER BY CC.CARTEIRA ASC";


            StringBuilder sb = new StringBuilder();
            sb.Append("DECLARE @DATAINI DATE, @DATAFIM DATE SET @DATAINI = CONVERT(DATE, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()), 0)) SET @DATAFIM = CONVERT(DATE, DATEADD(MM, DATEDIFF(MM, 0, GETDATE()) + 1, -1))");
            sb.Append("Select CC.CARTEIRA,");
            sb.Append("(SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock)WHERE ID_CART = CC.ID_CART AND FORNECEDOR = 'SISTEMASTH' AND CONVERT(DATE, DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS SISTEMASTH,");
            sb.Append("(SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With(Nolock) WHERE ID_CART = CC.ID_CART AND FORNECEDOR = 'NOVA VIDA' AND CONVERT(DATE, DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS NOVAVIDA,");
            sb.Append("(SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With(Nolock) WHERE ID_CART = CC.ID_CART AND FORNECEDOR = 'UNITFOUR' AND CONVERT(DATE, DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS UNIT4,");
            sb.Append("(SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With(Nolock) WHERE ID_CART = CC.ID_CART AND FORNECEDOR = 'LEMIT' AND CONVERT(DATE, DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS LEMIT,");
            sb.Append("(SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With(Nolock) WHERE ID_CART = CC.ID_CART AND CONVERT(DATE, DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS TOTAL");
            sb.Append("FROM BI.DBO.CARTEIRAS CC With(Nolock)");
            sb.Append("Where(SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With(Nolock) WHERE ID_CART = CC.ID_CART AND CONVERT(DATE, DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) <> 0 ORDER BY CC.CARTEIRA ASC");



Aconselho utilizar o string.builder ou o var @, pois seria uma melhor prática e pode influenciar na performance da aplicação.
Só mais um detalhe é extremamente complicado opinar sobre o código de utras pessoas, pois desconhecemos o cenário como um todo.
Porém esta sua query esta utilizando de muitas sub-queries o que pode comprometer seriamente a performance da aplicação.

Não que não se possa utilizar sub-queries, mas quando se usa mata um golfinho, um panda e um miletante SWJ. kkkk

Tenta dar um revisada e utilizar o minimo possível de sub-queries.

Jothaz

Jothaz
Responder

Mais Posts

02/03/2018

Jothaz

String cmd = "Select * From BD_DESENV.dbo.CLIENTES"

cmd = cmd & " where nome like 'oi%'"

cmd = cmd & " order by nome"
Responder

06/03/2018

Bruno Andriolli

Boa tarde!

Jothaz, muito obrigado pela juda mas não funcionou....

esta apresentando o seguinte erro:
Compilation Error
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.

Compiler Error Message: CS1002: ; expected

Olha o meu código é o seguinte:

string cmd = "DECLARE @DATAINI DATE, @DATAFIM DATE SET @DATAINI = CONVERT(DATE,DATEADD(MM,DATEDIFF(MM,0,GETDATE()),0)) SET @DATAFIM = CONVERT(DATE,DATEADD(MM,DATEDIFF(MM,0,GETDATE())+1,-1))"
cmd = cmd & " Select CC.CARTEIRA,"
cmd = cmd & " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'SISTEMASTH' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS SISTEMASTH,"
cmd = cmd & " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'NOVA VIDA' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS NOVAVIDA,"
cmd = cmd & " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'UNITFOUR' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS UNIT4,"
cmd = cmd & " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND FORNECEDOR = 'LEMIT' AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS LEMIT,"
cmd = cmd & " (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) AS TOTAL "
cmd = cmd & " FROM BI.DBO.CARTEIRAS CC With (Nolock) "
cmd = cmd & " Where (SELECT COUNT(CPF_CNPJ) FROM ENRIQUECIMENTO.DBO.ENVIO With (Nolock) WHERE ID_CART= CC.ID_CART AND CONVERT(DATE,DT_ENVIO) BETWEEN @DATAINI AND @DATAFIM) <> 0 ORDER BY CC.CARTEIRA ASC" ;


Antes estava em uma unica linha, alterei conforme a sua resposta e apresentou o erro que mostrei la em cima;,,,,

Estou fazendo algo errado?
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar