Usuário com melhor resposta
Problemas para fazer a atualição de uma table temporaria.

Pergunta
-
Fala galera! estou com um problema grande :/ Estava com problema de granulação de tive que fazer uma table temporaria para obter os resultados de outras tabelas. Pois bem, eu criei a tabela temporaria:
"select Nome, Codigo, sum (Valor_Auditoria) as Auditoria, sum(Valor_Reducaoz) as Reducaoz, sum(Valor_Vendas) as Vendas, sum(Quantidade) as Quantidade from Temporario group by Nome, Codigo, Data"; - (Esse é o select da tabela temporaria [Que na verdade não é mais temporaria, pois não vou deleta, queria apenas deletar as linhas dela])
o problema é que toda vez que eu chamar essa tela (Pop-up que mostra um reportviewer) eu tenho que limpar os dados da consulta anterior e preenche-la de acordo com os parametros de data.
<asp:SessionParameter Name="DataInicial" SessionField="DataInicial" Type="DateTime" />
<asp:SessionParameter Name="DataFinal" SessionField="DataFinal" Type="DateTime" />
<asp:SessionParameter Name="Shopping" SessionField="Shop_Select" Type="Int32" />
<asp:SessionParameter Name="Loja" SessionField="Loja" Type="String" />E as variaveis do insert para preencher novamente a tabela seriam:
string InserAudi;
InserAudi = "insert into temporario(Nome,Codigo, Valor_Auditoria, Quantidade) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";
string InserVenda;
InserVenda = "insert into Temporario (Nome,Codigo, Valor_Vendas) select Nome_Loja,L.Codigo_Loja, ValorVenda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";
string InserRedu;
InserRedu = "insert into temporario (Nome,Codigo, Valor_ReducaoZ) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";
Sou iniciante em ADO.NET e estou confundindo muito, principalmente essa coisa de DELETE. Alguém poderia me ajudar nessa rotina para deletar todos os dados da string "SELECT" Toda vez que a pop-up for iniciada? Ja procurei em apostilas, mas nada me ajuda :/
Assunto = dúvida
Respostas
-
Olá Claudio,
Na procedure que criamo ontem estavamos inserindo os dados em uma variável tabela. Ela é temporária e só existe no escopo da procedure, assim como qualquer outra variável. Então não existe o risco dela ficar cheia demais ou não.
Pode-se sim incluir e agrupar o valor de cada transação por sua data.
A procedure neste caso ficaria assim:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja END GO
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta Claudio 007-006 quinta-feira, 12 de julho de 2012 16:17
- Não Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
- Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
-
Olá Claudio,
No report vc esta passando a data 31/06/2012, essa data não existe. Junho vai só até o dia 30.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta Claudio 007-006 sexta-feira, 10 de agosto de 2012 13:46
Todas as Respostas
-
Fala galera, boa noite!! Seguinte, eu estou trabalhando em um relatório em reportviewer, cheguei a pedir ajuda quanto a minha Query, mas a única maneira de pegar os dados que eu preciso para o meu relatório foi criando uma tabela e preencher essa tabela com os dados de outras quatro tabelas... Deixa eu fazer um exemplo melhor:
Tab_Venda1 (um tipo de venda específica)
Tab_venda2 (Outro tipo)
Tab_venda3 (Outro tipo)
Tab_Loja (referência de nome das lojas e código das lojas)
Dessas 4 tabelas eu criei a tabela "temporaria" que contem somente as colunas de vendas dessas três tabelas, a coluna quantidade, a coluna código da loja e nome da loja.
A ideia é simples, por cada setor vão ser lançados valores de vendas para a cada loja. No final do mês o responsável terá acesso aos 3 valores das lojas e poderá verificar se há divergência quanto o valor total.
Bem, até aí ok. Eu fiz o reportviwer e ele mostra o valor que está guardado no banco (abre tudo certinho) agora eu preciso criar uma rotina em ASP.NET para que, ao ser chamado na "PaginaRelatorios.aspx" ele atualize a tabela "temporaria" com os dados selecionados das outras 4 tabelas.
Eu pensei em fazer no C#, mas parece que a unica maneira é carregar os dados diretamente no servidor... Não tenho muito conhecimento em ASP.NET, estou lendo uma apostila... será que podem me ajudar?
A query de update seria essa:
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:CnnString %>"
SelectCommand="UPDATE temporario(Nome,Codigo, Valor_Auditoria, Quantidade) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = 'id_loja' and Codigo_Shop= 'Shop_Select' and Data_Auditoria = 'DataInicial' and 'DataFinal'
UPDATE Temporario (Nome,Codigo, Valor_Vendas) select Nome_Loja,L.Codigo_Loja, ValorVenda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = 'id_loja' and Codigo_Shop = 'Shop_Select' and Data_Venda = 'DataInicial' and 'DataFinal'
UPDATE temporario (Nome,Codigo, Valor_ReducaoZ) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = 'id_loja' and Codigo_Shop = 'Shop_Select' Redu_DT_DataVenda = 'DataInicial' and 'DataFinal'
">
</asp:SqlDataSource>Desde já agradeço o apoio!
Assunto = dúvida
- Mesclado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator quinta-feira, 12 de julho de 2012 19:15 Mesmo tema
-
Olá Cláudio, Tudo bem?
Neste caso, o que eu faria, seria não utilizar um objeto SQLDAtaSource.
Neste cenário acredito que o melhor seja utilizar os objetos do ADO.Net para se conectar no banco de dados e executar seus UPDATES.
Vc pode fazer isso assim:
protected void btnSave_Click(object sender, EventArgs e) { ExecuteCommand("UPDATE temporario(Nome,Codigo, Valor_Auditoria, Quantidade)..."); ExecuteCommand("UPDATE temporario(Nome,Codigo, Valor_Auditoria, Quantidade)..."); ExecuteCommand("UPDATE temporario (Nome,Codigo, Valor_ReducaoZ)..."); } private static void ExecuteCommand(string sqlCommand) { using (SqlConnection connection = new SqlConnection("SUA CONNECTION STRING") { SqlCommand command = new SqlCommand(sqlCommand, connection); try { connection.Open(); command.ExecuteNonQuery(); } catch(Exception ex) { // Seu tratamento de erros } finally { connection.Close(); } } }
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Sugerido como Resposta AndreAlvesLimaModerator terça-feira, 3 de julho de 2012 10:42
-
Bom dia Fernando! Então, o problema é que por ser um reportviwer não posso add botões para atualizar a página. Existe uma página com os nomes das reports, e ela chama o .aspx das reports... Isso que tá sendo um maior incomodo. Ele precisar atualizar direto no ASPX... :/
Assunto = dúvida
-
Olá Claudio,
Tudo beleza?Nesse caso vc pode adicionar o código acima no Form Load da sua página. Irá executar o mesmo comportamento do SqlDataSource.
Essas páginas que abrem os Reports, elas tem algumas querystring? Vc passa algum parâmetro para elas?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Olá Claudio,
Vc pode aproveitar a conexão que esta no seu web.Config, basta vc fazer referência a DLL System.Configuration e depois utilizar o código abaixo para resgatar sua connection string:
string cs = System.Configuration.ConfigurationManager
.ConnectionString["NOME DA SUA CONNECTION STRING NO WEB.CONFIG"].ConnectionString;
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil
- Editado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator terça-feira, 3 de julho de 2012 19:32
-
Bom dia Fernando! Entendi :D Vai ajudar muito!!
Cara, seguinte, eu tive a seguinte ideia agora.... Bem, na reportviewer eu não to conseguindo chamar o update para alimentar a tabela "temporario" como tinha dito no início. Então queria criar uma rotina que ao clicar no botão ela fosse acionada :) Vou tentar aqui... Mas brigadão pelo apoio!
Assunto = dúvida
-
-
Olá grande Claudio,
Não esta abusando de maneira alguma.
Neste caso, o label não possui evento Click. Mas, um controle parecido é o HyperLinkButton, que possui evento Click.
Acredito que vc pode utilizá-lo neste caso.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Beleza!
O que precisar é só falar :)
Podemos fechar esta thread?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Fernando, a ideia saiu pela culatra... Bem, o esquema é o seguinte, estou com problemas na minha query, portanto tive que criar a tabela temporario para receber o valor da consulta das outras tabelas.
Bem, terei que deletar essa tabela toda vez que ela for consultada, criando-a novamente para que Ela Receba os resultados dos inserts:
INSERT INTO temporario (Nome,Codigo, Valor_Reducao) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja and Codiand Redu_DT_DataVenda = @DataInicial and @DataFinal and L.Codigo_Shop = @Shopping
(São 3dataset como esse... Um que alimente a coluna Reducao, outro a coluna "Vendas" e outro a coluna "Auditoria")
O problema é que não tenho ideia de como criar uma rotina que delete a tabela:
create table temporario
(
Nome nvarchar (70),
Codigo int,
Valor_Auditoria money,
Valor_Vendas money,
Valor_ReducaoZ money,
Quantidade int
)E que depois a reconstrua e que possa receber os INSERT novamente .. Passei a manhã procurando em foruns e não achei... Por um acaso poderia me ajudar com isso?
Assunto = dúvida
-
Olá Claudio,
Vc realmente precisa apagar a tabela? Se vc apagar apenas os registros não é suficiente?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Olá Claudio,
O comando "DELETE FROM TEMPORARIO" apagando todos os registros não te ajuda?
Vc quer pagar apenas os dados de algumas colunas?
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Seria sim, até mais facil.... mas não to conseguindo usar o delete devidamente.
Segue minha select:
select Nome, Codigo, sum (Valor_Auditoria) as Auditoria, sum(Valor_Reducaoz) as Reducaoz, sum(Valor_Vendas) as Vendas, sum(Quantidade) as Quantidade from Temporario group by Nome, Codigo, Data"
Essa é a select da tabela que tenho que deletar os dados quando a pop-up da reportviewer for aberta;
string InserAudi;
InserAudi = "insert into temporario(Nome,Codigo, Valor_Auditoria, Quantidade) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";
string InserVenda;
InserVenda = "insert into Temporario (Nome,Codigo, Valor_Vendas) select Nome_Loja,L.Codigo_Loja, ValorVenda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";
string InserRedu;
InserRedu = "insert into temporario (Nome,Codigo, Valor_ReducaoZ) select Nome_Loja,L.Codigo_Loja, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping";
E esses são as insert's que devem ser carregadas, logo apos deletar a row com os dados da consulta anterior... Tipo, o cara clica no link do Relatorio e antes de carregar os dados, ele precisa fazer o delete e o insert... meu, tentei 1000 coisas e nada :/ Tem ideia??
Assunto = dúvida
-
-
Olá Claudio,
Acredito que neste caso, o melhor a se fazer seja incluir os campos Codigo_Shop e Redu_DT_DataVenda na tabela de temporario, e depois utilizar os mesmos parâmetros @shopping, @datainicial, @datafinal e @loja para apagar os registros da tabela Temporario.
O que acha?
Esta solução é melhor do que criar um comando DELETE cheio de JOINs.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
o problema é que é uma tabela que recebe os dados de outras 4 tabelas. Eu tentei fazer o select com os JOIN com as 4, mas, como meu professor diz, deu um problema de granulação e os dados não eram corretos, eles se multiplicavam loucamente. Então, o unico modo de obter os dados é criando uma tabela intermediaria que recebe valor da tabela reducao, vendas, auditoria, loja. E nela preencher as colunas devidas de cada uma dessas, entende?
Então meio que nao ha outra saída (E olha que pesquisei muitoo rs) essa foi a mais fácil e eficaz, creio..
Assunto = dúvida
-
Olá Claudio,
Esse tipo de tabela auxiliar nunca é a melhor saída, pois é uma tabela que não se relaciona com as demais, possui dados repetidos (pois as demais tabelas também contém estes dados) e sua existência pode ser substituida por outros recursos do banco de dados.
Talvez, a melhor solução neste caso, fosse criar uma stored procedure que organizasse esses INSERTs em variáveis tabela, ou outros recursos do SQL e então retornasse estes dados ao invocador na procedure, não deixando registro físico de sua execução, isto é, não deixando seus resultado em alguma tabela por ai.
Mas no seu caso, pelo que analisei a query do seu Insert, acredito que vc pode incluir os campos que comentei, pois eles estão relacionados a cada tupla que retorna de sua consulta, e não acredito que a quantidade de registros irá aumentar devido a inclusão destes campos que estão funcionando como critério de seleção da sua query.
Vc esta executando alguma procedure? Se sim, poderia postar o código dela? Quem sabe não alteramos o seu código e não precisamos mais dessa tabela ;)
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
-
Olá Claudio,
Bem, diante do problema tempo... Acredito que a solução mais rápida é aquela que lhe disse sobre criar aquelas colunas na tabela. A quantidade de registros não irá alterar, pois vc esta incluindo novas colunas e não esta incluindo uma nova tabela para fazer novos joins e não esta utilizando nenhum critério de agrupamento.
Depois de adicionados os campos que comentei, vc terá de modificar os INSERTS que populam a sua tabela.
E por fim, terá de criar o comando DELETE para apagar aqueles dados, passando os mesmos parâmetros que esta utilizando para fazer a consulta do INSERT.
Mas, a melhor solução, seria criar a procedure que comentei.
Veja abaixo um esboço de como ela seria:
CREATE PROC spTesteConsulta @Loja INT, @Shopping INT, @DataFinal DATETIME, @DataInicial DATETIME AS BEGIN select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping UNION select Nome_Loja, L.Codigo_Loja, ValorVenda, 0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping UNION select Nome_Loja, L.Codigo_Loja, Redu_VL_ValorVenda, 0 from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping END GO EXEC spTesteConsulta 0, 0, '2012/01/01 00:00:00', '2012/02/01 00:00:00' GO
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Veja, o Codigo_Loja faz parte do Query para alimentar a tabela no xsd.
SELECT Nome, Codigo, SUM(Valor_Auditoria) AS Auditoria, SUM(Valor_ReducaoZ) AS Reducaoz, SUM(Valor_Vendas) AS Vendas, SUM(Quantidade) AS Quantidade
FROM temporario
WHERE EXISTS
(SELECT A.Data_Auditoria, V.Data_Venda, R.Redu_DT_DataVenda
FROM Tab_Auditoria AS A INNER JOIN
Tab_Vendas AS V ON A.Data_Auditoria = V.Data_Venda AND A.Codigo_Loja = V.Codigo_Loja INNER JOIN
Tab_ReducaoZ AS R ON R.Redu_DT_DataVenda = A.Data_Auditoria AND R.Redu_ID_Loja = A.Codigo_Loja
WHERE (A.Data_Auditoria = @DataInicial) AND (A.Data_Auditoria = @DataFinal) AND (A.Codigo_Loja = @Loja) AND (V.Codigo_Shop = @Shopping))
GROUP BY Nome, Codigo, DataAssunto = dúvida
-
Fernando, eu fiz algumas modficações na sua Procedure... Ela é ótima! ela me trouxe os dados... Porém, com um pequeno problema:
Loja Teste 01 1 899.00 18
Loja Teste 01 1 974.70 0
Loja Teste 01 1 1331.30 0Não consigo colocar os valores em uma linha só e com os nomes devidos... Só aparece "Valor_Auditado", os outros valores ficam na mesma coluna... E para que serve os ", 0" na select??
Assunto = dúvida
-
Olá Claudio,
Veja se assim a procedure fica melhor.
Acredito que ela irá resolver várias questões que vc precisa.
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataFinal DATETIME, @DataInicial DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja int, Codigo_Loja varchar(80), Valor_Auditado decimal(17,2), Qtd_Item int, ValorVenda decimal(17,2), Redu_VL_ValorVenda decimal(17,2) ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping UNION select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping UNION select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado), SUM(Qtd_Item), SUM(ValorVenda), SUM(Redu_VL_ValorVenda) from @vendas group by Nome_Loja, Codigo_Loja, END GO
Talvez eu possa ter errado algo na sintaxe ou nos tipos de dados. Vc pode corrigir qualquer problema que possa aparecer com relação a isso...
Nesta procudure estou utilizando uma variável tabela. Esse código poderia ficar melhor se existisse alguma chave de relacionamento entre suas tabelas de vendas.
O ",0 " e o ", 0.0" servem para simular valores em colunas que não existem nas demais tabelas.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Olá Claudio,
Qual dos valores aparecem errados?
Qual o comportamento deste relatório?
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataFinal DATETIME, @DataInicial DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja int, Codigo_Loja varchar(80), Valor_Auditado decimal(17,2), Qtd_Item int, ValorVenda decimal(17,2), Redu_VL_ValorVenda decimal(17,2) ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and Codigo_Loja = @Loja andRedu_DT_DataVenda = @DataInicial and @DataFinal and l.Codigo_Shop = @Shopping select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado), SUM(Qtd_Item), SUM(ValorVenda), SUM(Redu_VL_ValorVenda) from @vendas group by Nome_Loja, Codigo_Loja, END
Tente executar agora.
Dê mais dados sobre o funcionamento da relatório e sobre quais dados devem ser retornados.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Então, eu tive que fazer umas modificações:
CREATE PROC spTesteConsulta
@Loja INT,
@Shopping INT,
@DataFinal DATETIME,
@DataInicial DATETIME
AS
BEGIN
select Nome_Loja, L.Codigo_Loja, sum(Valor_Auditado) as Valor_Auditado, sum (Qtd_Item) as Quantidade from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012/06/08' and l.Codigo_Shop = '1'
group by Nome_Loja, L.Codigo_Loja
union
select Nome_Loja, L.Codigo_Loja, sum(ValorVenda) as Valor_Venda, 0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012/06/08' and l.Codigo_Shop = '1'
group by Nome_Loja, L.Codigo_Loja
union
select Nome_Loja, L.Codigo_Loja, sum(Redu_VL_ValorVenda) as ReducaoZ, 0 from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja and L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012/06/08' and l.Codigo_Shop = '1'
group by Nome_Loja, L.Codigo_Loja
END
GO
ALTER PROC spTesteConsulta
@Loja INT,
@Shopping INT,
@DataFinal DATETIME,
@DataInicial DATETIME
AS
BEGIN
DECLARE @vendas TABLE
(
Nome_Loja nvarchar (80),
Codigo_Loja int,
Valor_Auditado Money,
ValorVenda money,
Redu_VL_ValorVenda money,
Qtd_Item int
)
INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Qtd_Item,Valor_Auditado, ValorVenda, Redu_VL_ValorVenda)
select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012-06-08' and L.Codigo_Shop = '1'
UNION
select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and L.Codigo_Shop = '1'
UNION
select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012-06-08' and L.Codigo_Shop = '1'
select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado), SUM(ValorVenda), SUM(Redu_VL_ValorVenda), SUM(Qtd_Item) from @vendas
group by Nome_Loja,Codigo_Loja
END
GOO resultado que devia aparecer era:
Loja Teste 01 1 899.00 974.70 1331.30 18
e o que ele está me dando é:
Loja Teste 01 1 13,00 1231,30 974,70 799
Assunto = dúvida
-
Olá Claudio,
Existia um campo na posição errada do INSERT e troquei o UNION por um UNION ALL.
Veja se agora resolve.
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataFinal DATETIME, @DataInicial DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int ) INSERT INTO @vendas ( Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012-06-08' and L.Codigo_Shop = '1' UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and L.Codigo_Shop = '1' UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012-06-08' and L.Codigo_Shop = '1' select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado), SUM(ValorVenda), SUM(Redu_VL_ValorVenda), SUM(Qtd_Item) from @vendas group by Nome_Loja,Codigo_Loja END GO
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Loja Teste 01 1 899,00 1331,30 974,70 18
PERFEITO! \o Me ajudou muito! Agora que vi a utilidade da Procedure, irei aprender ela o quanto antes!!! Agora eu só modifico os parametros e modifico a query pela procedure ^^
Tipo, como usa o SUM, sempre terá apenas 1 linha... Tem como criar uma PROCEDURE que exclua essa linha antes de carregar os outros parametros (de data) que preencher a tabela?
Assunto = dúvida
-
-
Olá Claudio,
Que bom que funcionou.
Não entendi sua pergunta.
Na verdade, o seu SUM esta retornando um único resultado por vez por conta do filtro de código da loja, se vc remover este filtro vera que o resultado retornado será a somatoria de diversas lojas.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Entendi, é, ele vai somar todos os valores daquele codigo, certo?
Eu fui mudar a Query para a Procedure, e ela executa perfeitamente, eu adicionei os parâmetros e tal. Porém, antes de finalizar o wizard ele alega um problema (Que não aparece na Query Builder):
Unable to parse Query Text
Sabe o que poderia ser esse erro??
Assunto = dúvida
-
Olá Claudio,
Vc poderia postar o código que esta colocando no Query Builder?
Se eu não me engano, o query builder tem uma opção só para stored procedures onde vc apenas informa o nome da procedure.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
CREATE PROC spTesteConsulta @Loja INT, @Shopping INT, @DataFinal DATETIME, @DataInicial DATETIME AS BEGIN SELECT Nome_Loja, L.Codigo_Loja,
sum(Valor_Auditado) AS Valor_Auditado,
sum(Qtd_Item) AS Quantidade
FROM Tab_Auditoria AS A INNER JOIN
Tab_Loja AS L ON
A.Codigo_Loja = L.Codigo_Loja
WHERE L.Codigo_Loja = @Loja AND
Data_Auditoria = @DataInicial AND
Data_Auditoria = @DataFinal AND
l.Codigo_Shop = @Shopping
GROUP BY Nome_Loja, L.Codigo_Loja
UNION
SELECT Nome_Loja, L.Codigo_Loja, sum(ValorVenda) AS Valor_Venda, 0
FROM Tab_Vendas AS V INNER JOIN
Tab_Loja AS L ON V.Codigo_Loja = L.Codigo_Loja
WHERE L.Codigo_Loja = @Loja AND Data_Venda = @DataInicial AND Data_Venda = @DataFinal AND l.Codigo_Shop = @Shopping
GROUP BY Nome_Loja, L.Codigo_Loja
UNION
SELECT Nome_Loja, L.Codigo_Loja, sum(Redu_VL_ValorVenda) AS ReducaoZ, 0
FROM Tab_ReducaoZ AS R INNER JOIN
Tab_Loja AS L ON R.Redu_ID_Loja = L.Codigo_Loja AND L.Codigo_Loja = @Loja AND Redu_DT_DataVenda = @DataInicial AND
Redu_DT_DataVenda = @DataFinal AND l.Codigo_Shop = @Shopping
GROUP BY Nome_Loja, L.Codigo_Loja
ALTER PROC spTesteConsulta
@Loja INT,
@Shopping INT,
@DataFinal DATETIME,
@DataInicial DATETIME
AS
BEGIN
DECLARE @vendas TABLE
(
Nome_Loja nvarchar (80),
Codigo_Loja int,
Valor_Auditado Money,
ValorVenda money,
Redu_VL_ValorVenda money,
Qtd_Item int
)
INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda)
select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0 from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Auditoria = '2012-06-08' and L.Codigo_Shop = '1'
UNION ALL
select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0 from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Data_Venda = '2012-06-08' and L.Codigo_Shop = '1'
UNION ALL
select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = '1' and Redu_DT_DataVenda = '2012-06-08' and L.Codigo_Shop = '1'
select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens from @vendas
group by Nome_Loja,Codigo_Loja
END GOAssunto = dúvida
-
-
Olá Claudio,
Na verdade vc não precisa colocar todo este código no Query Builder, pois ele é executado apenas no servidor de banco de dados.
Vc deve colocar no query builder apenas a chamada a procedure. Algo como:
EXEC spTesteConsulta
Se eu não me engano os parâmetros são identificados sozinhos.
Outro ponto, spTesteConsulta não é um bom nome, quando for possível altere o nome desta procedure.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Boa tarde Fernando!
Bem, eu praticamente reconstrui a minha Rdlc. E gostaria de pedir auxilio novamente. Na parte da setagem. Não estou conseguindo capturar as datas, estou fazendo os testes como uma query sql, com ela vai... Como tenho que inserir os valores pelas datas e mostrar os valores referentes aquelas datas, não sei se tenho que criar uma coluna para armazenar as datas da tab_ReducaoZ, Tab_Vendas e Tab_Auditoria.
Os parâmetros critério para trazer os resultados do banco:
<SelectParameters>
<asp:SessionParameter Name="DataInicial" SessionField="DataInicial" Type="DateTime" />
<asp:SessionParameter Name="DataFinal" SessionField="DataFinal" Type="DateTime" />
<asp:SessionParameter Name="Shopping" SessionField="Shop_Select" Type="String" />
<asp:SessionParameter Name="Loja" SessionField="Loja" Type="String" />
</SelectParameters>Desde já, agradeço a atenção ;D
Assunto = dúvida
-
Desculpa a confusão...
Acho que agora entendi o erro... Nos parametros de data, se eu coloco a data inicial e a data final iguais, ele me traz os resultados certos, porém, se eu testo com datas diferentes, por exemplo: 2012-06-01 e 2012-06-08 ele mostra esse erro na Preview Data:
TYPE VALUE
int32 0
Ou seja, ele não tá somando com valores de datas de outros dias, certo?
Assunto = dúvida
-
Olá Claudio,
Poderia dar um print screen no erro e no query builder onde passa os parâmetros?
Qual o comportamento da procedure quando vc passa data diferentes?[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Bom dia, Fernando!
Segue as prints:
Nesse caso a Data está diferente: '2012-06-06' e '2012-06-06' E então acontece esse erro. Eu fiz o teste no banco de dados para a mesma consulta (Loja = 6 no shopping = 3) e para ambas as datas apareceram valores, mas ainda que não houvesse valor na data, a ideia era que o valor que falta ficasse nulo.
Assunto = dúvida
-
Olá Claudio,
Poste o código da sua procedure como ele esta hoje. Vou colocar um comando between entre as datas e as variáveis e resolveremos o problema.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
Espero que a imagem não tenha ficado confusa... Aqui estou buscando os dados para verificar se nas datas há mesmo valores para ambos os dias na tabela para a loja e o shopping em questão.
Por pegar o resultado de datas diferentes e preencher na tabela, não haveria como deletar os valores que ficaram na tabela após a consulta? pois chegará uma hora que de tanto insert into a tabela ficará monstruosamente grande!! xD Por exemplo, o cliente chamou a reportViewer, aí a procedure traz os resultados de acordo com a data e loja, e após carregar os dados na tabela, já realizar um delete? Eu pensei em tentar colocar o delete após a INSERT INTO, deletando os valores iguais as strings de referência, mas não deu certo.
Outra curiosidade que ficou é, como faço para, por exemplo, nesse caso, quando a consulta me retornar os valores eu separar as datas por linhas, exemplo:
2012-06-06 Loja(1) codigo (1) venda (2,00) auditoria (3,00) reducaoz (9,00) quantidade (9)
2012-06-08 Loja(1) codigo (1) venda (8,00) auditoria (2,00) reducaoz (6,00) quantidade (9)
2012-06-06 Loja(1) codigo (1) venda (Nulo) auditoria (5,00) reducaoz (6,00) quantidade (8)
Teria como fazer isso com comandos pela procedure?
Assunto = dúvida
-
Olá Claudio,
Na procedure que criamo ontem estavamos inserindo os dados em uma variável tabela. Ela é temporária e só existe no escopo da procedure, assim como qualquer outra variável. Então não existe o risco dela ficar cheia demais ou não.
Pode-se sim incluir e agrupar o valor de cada transação por sua data.
A procedure neste caso ficaria assim:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, 0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja END GO
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta Claudio 007-006 quinta-feira, 12 de julho de 2012 16:17
- Não Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
- Marcado como Resposta Claudio 007-006 sexta-feira, 13 de julho de 2012 13:24
-
Olá, Fernando! Eu add a nova procedure, segue o resultado:
Alberg inc. 6 0,0000 0,0000 400,0000 0 4/6/2012 Alberg inc. 6 0,0000 11880,0000 0,0000 0 5/6/2012 Alberg inc. 6 998,0000 300,0000 200,0000 9 6/6/2012 Alberg inc. 6 0,0000 0,0000 100,0000 0 7/6/2012 Alberg inc. 6 100,0000 100,0000 100,0000 5 8/6/2012
Simplesmente genial, creio que satifaz minha dúvida e foi uma grande aula, obrigado pela lição :D
Assunto = dúvida
-
Bom dia, Fernando... Creio que está mais que evidente que sou iniciante na plataforma .NET, certo? Estou com dificuldades com essa coisa de parâmetros... Eu estou recebendo as variáveis corretas (os valores batem com o que quero) de data inicial, datafinal, shopping e Loja. Porém, elas dão erro no SETPARAMETER...
ReportParameter[] reportParams = new ReportParameter[4];
reportParams[0] = new ReportParameter("DataInicial", dtInicial);
reportParams[1] = new ReportParameter("DataFinal", dtFinal);
reportParams[2] = new ReportParameter("Shopping", strIdShopping);
reportParams[3] = new ReportParameter("Loja", strIdLoja);
ReportViewer1.LocalReport.SetParameters(reportParams); <- Aqui aponta o erro. (An error occurred during local report processing.)
ReportViewer1.ShowParameterPrompts = false;
ReportViewer1.LocalReport.Refresh();
An attempt was made to set a report parameter 'DataInicial' that is not defined in this report.
Descrição: Ocorreu uma exceção não tratada durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Detalhes da Exceção: Microsoft.ReportingServices.Diagnostics.Utilities.UnknownReportParameterException: An attempt was made to set a report parameter 'DataInicial' that is not defined in this report.
Um dos únicos erros da página é: Error 81 Referência de objeto não definida para uma instância de um objeto. /
Segue minhas Sets:
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
TypeName="Relatorios_mes_ValoresTableAdapters.spTesteConsultaTableAdapter" OldValuesParameterFormatString="original_{0}" InsertMethod="Insert">
<SelectParameters>
<asp:SessionParameter Name="Loja" SessionField="Loja" Type="Int32" />
<asp:SessionParameter Name="Shopping" SessionField="Shop_Select" Type="Int32" />
<asp:SessionParameter Name="DataInicial" SessionField="DataInicial" Type="DateTime" />
<asp:SessionParameter Name="DataFinal" SessionField="DataFinal" Type="DateTime" />
</SelectParameters>
<InsertParameters>
<asp:Parameter Name="Loja" Type="Int32" />
<asp:Parameter Name="Shopping" Type="Int32" />
<asp:Parameter Name="DataInicial" Type="DateTime" />
<asp:Parameter Name="DataFinal" Type="DateTime" />
</InsertParameters>
</asp:ObjectDataSource>
E na minha .xsd:
<Parameters>
<Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="ReturnValue" ParameterName="@RETURN_VALUE" Precision="10" ProviderType="Int" Scale="0" Size="4" SourceColumnNullMapping="False" SourceVersion="Current">
</Parameter>
<Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Loja" Precision="10" ProviderType="Int" Scale="0" Size="4" SourceColumn="Codigo_Loja" SourceColumnNullMapping="False" SourceVersion="Current">
</Parameter>
<Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="Int32" Direction="Input" ParameterName="@Shopping" Precision="10" ProviderType="Int" Scale="0" Size="4" SourceColumn="" SourceColumnNullMapping="False" SourceVersion="Current">
</Parameter>
<Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DataInicial" Precision="23" ProviderType="DateTime" Scale="3" Size="8" SourceColumn="Data" SourceColumnNullMapping="False" SourceVersion="Current">
</Parameter>
<Parameter AllowDbNull="True" AutogeneratedName="" DataSourceName="" DbType="DateTime" Direction="Input" ParameterName="@DataFinal" Precision="23" ProviderType="DateTime" Scale="3" Size="8" SourceColumn="Data" SourceColumnNullMapping="False" SourceVersion="Current">
</Parameter>
</Parameters>Pelo que vi os parâmetros estão certos...
Assunto = dúvida
-
-
Olá, Fernando Henrique! Tudo bem?? Cara, aprendi bastante sobre SQL depois dessas dúvidas, porém, preciso fazer uma modificação naquela Procedure que você me ajudou, não estou conseguindo fazer uma modificação que foi pedida agora:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja, Data END EXEC spTesteConsulta 0, 0, @DataInicial, @DataFinal GO
Quando ValorVenda, Valor_Auditado, Redu_VL_ValorVenda tiverem valor "0" isso é, por exemplo:
dia 2012-08-07 e ValorVenda: 0,00 e Valor_Auditado: 0,00 e Redu_VL_ValorVenda:0,00
Então aparecer uma linha em branco, demonstrando que aquele dia a loja não abriu. (seria acrescentar essa funcionalidade) eu tentei acrescentar um "Where" para pegar o valor 0 e acrescentar como nulo, ou mesmo mostrando zero mesmo na tela (seria melhor ter os 3 campos com 0,00 no dia sem venda) mas retorna erro. Poderia me ajudar novamente?
Desde já agradeço o apoio,
Cláudio vieira.
Assunto = dúvida
-
Olá Carlos,
Veja se isso lhe ajuda:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja, Data END DELETE FROM @vendas WHERE Valor_Auditado = 0 AND ValorVenda = 0 AND Redu_VL_ValorVenda = 0 EXEC spTesteConsulta 0, 0, @DataInicial, @DataFinal GO
[]s!Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
-
A minha ideia era:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Valor_Auditado >= 0 UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and ValorVenda >= 0 UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Redu_VL_ValorVenda >= 0 select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja, Data END DELETE FROM @vendas WHERE Valor_Auditado = 0 AND ValorVenda = 0 AND Redu_VL_ValorVenda = 0 EXEC spTesteConsulta 0, 0, @DataInicial, @DataFinal GO
where (...) >= 0 Para tentar imprimir sempre que o valor dentro da data inicial e data final for igual a 0.
Assunto = dúvida
-
Olá Claudio,
Veja se lhe ajuda:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Valor_Auditado >= 0 UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and ValorVenda >= 0 UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping and Redu_VL_ValorVenda >= 0 select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja, Data DECLARE @DataAux DATETIME, @Nome_Loja nvarchar (80) SET @DataAux = @DataInicial SELECT TOP 1 @Nome_Loja = Nome_Loja FROM Tab_Loja WHERE Codigo_Loja = @Loja WHILE(@DataAux <= @DataFinal) BEGIN IF NOT EXISTS(SELECT TOP 1 * FROM @vendas WHERE MONTH(Data) = MONTH(@DataAux) AND DAY(Data) = DAY(@DataAux) AND YEAR(Data) = YEAR(@DataAux)) BEGIN INSERT INTO @vendas VALUES (@Nome_Loja, @Loja, 0, 0, 0, 0, @DataAux) END SET @DataAux = DATEADD(DAY, 1, @DataAux) END SELECT * FROM @vendas END GO
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil
- Editado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator terça-feira, 7 de agosto de 2012 16:43
-
Olá, Fernando! Eu alterei a procedure... aquele erro no teste sumiu \o/ Mas infelizmente o resultado continua o mesmo :/ segue a print do meu banco mostrando que tenho vendas no mês 8, mas ele só me traz até o mês 6..
Aqui ele retorna apenas 6 linhas, além de não retornar as linham em que deveriam ser tudo "0" (que são os intervalos entre datas).. Teria uma maneira de fazer uma contagem de linhas e somar +1 (string) para cada linha nula (intervalo de data) ou algo assim? poderia me ajudar tbm...
Assunto = dúvida
-
-
-
Tentei criar um where que amarrasse a data com o valor "0", mas dá erro... Parece que não dá para eu pegar a data do parâmetro inicial e do parâmetro data final, amarrar com uma data e se o valor for "0" eu contar uma string (só para saber o valor total de dias sem venda entre o período inicial e final :/ ) Também ajudaria, pois o cálculo que quero fazer é o seguinte:
Soma do valor total de uma coluna / Total de dias com vendas * Total de dias no mês... Esse cara que tá me matando.
Assunto = dúvida
-
-
Oi galera. Faz um tempinho que estou com um problema para criar um relatório. Desisti de tentar resolver pelo Sql (via procedure) e resolvi partir pra C#... Bem, é o seguinte, tenho um relatório com algo em torno de 7 colunas. 3 dessas colunas são valores de vendas, ambas são da mesma loja (código_loja é a key) e elas retornam-me o resultado por via de 4 parametros:
@Loja,
@Shopping
@DataInicial
@DataFinal
Até aqui tudo bem, tenho todos os dados que preciso. porém, meu relatório é mensal, logo, tenho que saber os dias que a loja em questão abre ou não. Para isto, no intervalo da @DataInicial e @DataFinal eu preciso acrescentar o valor "0,00" para todas as colunas que contenham o valores de venda (money) e uma coluna de quantidade (INT). Bem, estou fazendo uma maneira em ADO.NET, porém, até agora não obtive sucesso, alguém poderia ver o erro ou me ajudar com outras ideias?
PS: O código a seguir só insere dados para uma coluna de vendas.
string striVV = "select Nome_Loja, L.Codigo_Loja, ValorVenda, Data_Venda from Tab_Loja as L inner join Tab_Vendas as V on L.Codigo_Loja = V.Codigo_Loja where L.Codigo_Loja = " + Session["Loja"] + " and L.Codigo_Shop = " + Session["Shop_Select"].ToString() + " and Data_Registro BETWEEN " + Session["DataInicial"] + " AND " + Session["DataFinal"] + ""; ControlShopCS.DB d2 = new DB(); DataTable dt2 = new DataTable(); d2.ExecuteQuery(striVV, ref dt2); int i; string StrAud = "Select ValorVenda, Data_Venda from Tab_Vendas where L.Codigo_Loja = " + Session["Loja"] + " and L.Codigo_Shop = " + Session["Shop_Select"].ToString() + " and Data_Registro BETWEEN " + Session["DataInicial"] + " AND " + Session["DataFinal"] + ""; for (i = 0; i <= dt2.Rows.Count; i++) { if (StrAud == "") { StrAud = "INSERT INTO Tab_Vendas (ValorVenda == Null)"; StrAud += "Value (0.00)"; ControlShopCS.DB d4 = new DB(); d4.ExecuteQuery(StrAud); } }
Desde já agradeço a atenção.
Assunto = dúvida
- Mesclado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator sexta-feira, 10 de agosto de 2012 13:53 Mesmo motivo e tema
-
Olá Claudio,
Desculpe a demora em responder. Estes dias foram muito corridos, tenho trabalhado até mto tarde sempre.
Isto deve resolver:
ALTER PROC spTesteConsulta @Loja INT, @Shopping INT, @DataInicial DATETIME, @DataFinal DATETIME AS BEGIN DECLARE @vendas TABLE ( Nome_Loja nvarchar (80), Codigo_Loja int, Valor_Auditado Money, ValorVenda money, Redu_VL_ValorVenda money, Qtd_Item int, Data DateTime ) INSERT INTO @vendas (Nome_Loja, Codigo_Loja, Valor_Auditado, Qtd_Item, ValorVenda, Redu_VL_ValorVenda, Data) select Nome_Loja, L.Codigo_Loja, Valor_Auditado, Qtd_Item, 0.0, 0.0, Data_Auditoria from Tab_Auditoria as A inner join Tab_Loja as L on A.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Auditoria BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0, ValorVenda, 0.0, Data_Venda from Tab_Vendas as V inner join Tab_Loja as L on V.Codigo_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Data_Venda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping UNION ALL select Nome_Loja, L.Codigo_Loja, 0.0, 0,0.0, Redu_VL_ValorVenda, Redu_DT_DataVenda from Tab_ReducaoZ as R inner join Tab_Loja as L on R.Redu_ID_Loja = L.Codigo_Loja where L.Codigo_Loja = @Loja and Redu_DT_DataVenda BETWEEN @DataInicial AND @DataFinal and L.Codigo_Shop = @Shopping DECLARE @DataAux DATETIME, @Nome_Loja nvarchar (80) SET @DataAux = @DataInicial SELECT TOP 1 @Nome_Loja = Nome_Loja FROM Tab_Loja WHERE Codigo_Loja = @Loja WHILE(@DataAux <= @DataFinal) BEGIN IF NOT EXISTS(SELECT TOP 1 * FROM @vendas WHERE MONTH(Data) = MONTH(@DataAux) AND DAY(Data) = DAY(@DataAux) AND YEAR(Data) = YEAR(@DataAux)) BEGIN INSERT INTO @vendas VALUES (@Nome_Loja, @Loja, 0, 0, 0, 0, @DataAux) END SET @DataAux = DATEADD(DAY, 1, @DataAux) END select Nome_Loja, Codigo_Loja, SUM(Valor_Auditado) as Auditado, SUM(ValorVenda)as Vendas, SUM(Redu_VL_ValorVenda)as Reducao, SUM(Qtd_Item)as Itens, Data from @vendas group by Nome_Loja,Codigo_Loja, Data END
go
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil
- Editado Fernando Henrique Inocêncio Borba FerreiraMicrosoft employee, Moderator sexta-feira, 10 de agosto de 2012 01:12
-
Claudio,
Tudo beleza?
Respondi sua outra thread. Estava faltando apenas o group by naquela procedure.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Olá Fernando, boa noite!! Inicialmente gostaria de agradecer pelo apoio (: Eu fiquei tentando criar alterações na procedure, como sempre tem sido uma grande aula para mim ^^ Uma dúvida que ficou é, o que faz o comando "select top1"?
Novamente eu agradeço pelo apoio,
Cláudio;
Assunto = dúvida
-
Olá Claudio,
O "SELECT TOP 1" (tem um espaço entre o TOP e o 1) indica que será selecionada apenas a primeira linha.
O TOP 2 retorna as duas primeiras linhas, o TOP 3 as três primeiras linhas e assim por diante.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Olá Claudio,
No report vc esta passando a data 31/06/2012, essa data não existe. Junho vai só até o dia 30.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil- Marcado como Resposta Claudio 007-006 sexta-feira, 10 de agosto de 2012 13:46
-
Só posso dizer que aprendi muito mais aqui do que em muitos livros ou em aulas. E essa lição de agora, parece que um programador tem que ter antes de tudo calma e uma visão ampliada da situação, obrigado pelos bons exemplos, Fernando ;)
Seguindo seu blog, é um ótimo Exemplo de profissional ;)
Obrigado!
Assunto = dúvida
-
Vlw! Muito obrigado pelos elogios Claudio :)
Meu objetivo realmente é compartilhar conhecimento e aprender com o fórum.
Nós somos uma comunidade e estamos sempre trabalhando com o intuito de ajudar uns aos outros :)
Se me permitir vou mesclar esta thread com aquela que vc abriu essa semana, pois o assunto é o mesmo.
Obrigado.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil -
-
Boa! Vou esperar por suas contribuições :)
Fernando Henrique Inocêncio Borba Ferreira
Microsoft MVP - Data Platform Development
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique
Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil