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
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
Curtir tópico
+ 0
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:
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.
É 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
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"
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?
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
Clique aqui para fazer login e interagir na Comunidade :)