Usuário com melhor resposta
Linq com stored procedure

Pergunta
-
Eu criei no VS 2010 a stored procedure:
CREATE PROCEDURE [dbo].[sp_RelatorioAluno] @id_turma INT, @dataa VARCHAR(30) AS BEGIN SELECT Aggr.id_turma, Aggr.id_usuario, Aggr.dia_mes_ano, CASE WHEN Aggr.total_de_segundos IS NOT NULL THEN CONVERT(VARCHAR, ((Aggr.total_de_segundos)/3600)) +':' + CONVERT(VARCHAR, (((Aggr.total_de_segundos)%3600)/60)) +':' + CONVERT(VARCHAR, (((Aggr.total_de_segundos)%3600)%60)) ELSE '0:0:0' END total_de_horas FROM ( SELECT DISTINCT id_turma, id_usuario, CONVERT(VARCHAR, R1.data_hora,103) dia_mes_ano, DATEDIFF (SECOND, (SELECT TOP 1 data_hora FROM [dbo].[dbo].[RelatorioAluno] R2 WHERE R2.id_usuario = R1.id_usuario AND CONVERT(VARCHAR, R2.data_hora,103) = CONVERT(VARCHAR, R1.data_hora,103) ORDER BY data_hora), (SELECT TOP 1 data_hora FROM [dbo].[dbo].[RelatorioAluno] R2 WHERE R2.id_usuario = R1.id_usuario AND CONVERT(VARCHAR, R2.data_hora,103) = CONVERT(VARCHAR, R1.data_hora,103) ORDER BY data_hora DESC) ) TOTAL_DE_SEGUNDOS FROM [dbo].[dbo].[RelatorioAluno] R1 WHERE R1.id_turma = @id_turma ) AS Aggr WHERE Aggr.dia_mes_ano = @dataa END
Fiz desta forma pq vou precisar da turma e a data dinamicamente, até ai tudo bem. O problema é chamar ela, o que eu tenho é o seguinte:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; using System.Data.SqlClient; using System.Data; namespace Verification { public partial class RelatorioAluno : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //quando carrega a página entra aqui if (!Page.IsPostBack) { //pega a url string url = Request.Url.AbsoluteUri; //pega o id string id_turma = Request.QueryString["id_turma"]; string dia_mes_ano = Request.QueryString["dia_mes_ano"]; this.SelecionaRel(id_turma, dia_mes_ano); } } void SelecionaRel(string id_turma, string dia_mes_ano) { using (DataClasses1DataContext context = new DataClasses1DataContext(ConfigurationManager.ConnectionStrings["dboConnectionString"].ConnectionString)) { var resultado = from re in sp_RelatorioAlunoResult select re.total_de_horas; DataList1.DataSource = resultado.ToList(); DataList1.DataBind(); } } } }
Ali onde tento pegar o sp_RelatorioAluno se eu informa o que quero dentro deste método ex: sp_RelatorioAluno(4, '28/05/2012') ele n me deixa compilar da erro. Eu preciso que depois que ele faça esta procedure ele me jogue na view do aspx, jogar na view eu consigo com o dataList. Alguém sabe como me ajudar?
O que ele me retorna se eu faço no sql server 2008 é:id_turma | id_usuario | dia_mes_ano | total_de_horas
4 | 5 | 28/05/2012 |2:48:0
4 | 11| 28/05/2012 |2:58:59
4 | 15| 28/05/2012 |0:0:0
4 | 16| 28/05/2012 |0:0:0
4 | 17| 28/05/2012 |0:0:0O retorno mostra o total de horas de cada aluno, ele tem várias entradas no mesmo dia dai vai pegando e somando as horas em aula.
- Editado guitutilo terça-feira, 29 de maio de 2012 23:24
Respostas
-
Olá Giututilo,
A sintaxe correta é assim:
var resultado = context.sp_RelatorioAlunoResult(Convert.ToInt32(id_turma), dia_mes_ano);
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Marcado como Resposta guitutilo sexta-feira, 1 de junho de 2012 02:28
-
Olá Guitutilo,
Abra os arquivos DataClasses1.dbmlt.layout e DataClasses1.designer.cs e veja se a procedure esta registrada em algum ponto.
Se não estiver registrada, apague o mapeamento e faça-o novamente.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Marcado como Resposta guitutilo sexta-feira, 1 de junho de 2012 02:28
Todas as Respostas
-
Olá Giututilo,
A sintaxe correta é assim:
var resultado = context.sp_RelatorioAlunoResult(Convert.ToInt32(id_turma), dia_mes_ano);
[]s!Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Marcado como Resposta guitutilo sexta-feira, 1 de junho de 2012 02:28
-
-
Olá,
Parece que não existe esta procedure dentro do DataContext.
Depois de criada a procedure no banco de dados, vc abriu o wizard e importou a procedure para o projeto, assim como se fosse uma tabela nova?
É preciso adicionar a procedure ao modelo para que o Entity Framework saver que ela existe.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique -
-
Olá Guitutilo,
Abra os arquivos DataClasses1.dbmlt.layout e DataClasses1.designer.cs e veja se a procedure esta registrada em algum ponto.
Se não estiver registrada, apague o mapeamento e faça-o novamente.
[]s!
Fernando Henrique Inocêncio Borba Ferreira
while(alive){ this.WriteCode(); }
Blog: http://ferhenriquef.com/
Twitter: @ferhenrique- Marcado como Resposta guitutilo sexta-feira, 1 de junho de 2012 02:28
-