Linq

4 respostas
D

Espero que esta questão esteja no lugar certo. Tenho uma StoredProcedure no SQL Server, e estou tentado usa-la no C# com Linq to SQL, porem ela não da nenhum erro, mas também não retorna nenhum valor.

Abaixo o método para chamar a SP no model?

public override IQueryable getReferenciaArtigo()
{
    var referenciaArtigo = (IQueryable)Datacontext.SP_GET_ArTIGO("INF");

     return referenciaArtigo;
}

aqui a chamada do método no form.

IQueryable artigos = afentidadecontroller.getReferenciaArtigo();
foreach (IQueryable artigo in artigos)
     ListaArtigo.Add(artigo);

4 Respostas

Dragoon

Exemplo Simples:

Tabela Itens

CREATE TABLE [dbo].[Itens](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[Nome] [nvarchar](50) NULL,
 CONSTRAINT [PK_Itens] PRIMARY KEY CLUSTERED 
(
	[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
 IGNORE_DUP_KEY = OFF, 
ALLOW_ROW_LOCKS = ON, 
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

Stored Procedure:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE SP_List_Itens 
AS
BEGIN	
	SET NOCOUNT ON;    
	SELECT * FROM dbo.Itens;
END
GO

Ou seja, essa StoreProcedure retorna uma lista de valores:

Código:

var itens = db.SP_List_Itens().ToList();
        
foreach(var item in itens)
{
     var _id = item.Id;
     var _nome = item.Nome;
}

Então, não retorna um IQueryable, acho eu que retornar um dados pronto já!

Como seria a sua StoredProcedure?

Outro ponto, verifique se é ideal nesse caso retornar um StoredProcedure, no caso exemplo, que citei seria redundante, coloquei, mesmo como exemplo, de processo.

D

Boa tarde Dragoon
Obrigado pela sua ajuda.
esse é problema(o retorno). minha sp retorna uma string.
abaixo a sp

CREATE PROCEDURE [dbo].[SP_GET_ArTIGO]
@CodLoja nvarchar(10)
AS

BEGIN
SELECT DISTINCT RTRIM(LTRIM(Ref)) AS Referencia,Artigo
FROM           Tb_artigo WITH (NOLOCK)
WHERE        (CodLoja = @CodLoja) AND (preco > 0) AND (stock = 'S') AND (QTD > 0) AND (ISNULL(Data_Expira, CONVERT(VARCHAR(10), GETDATE(), 120)) 
                         >= CONVERT(VARCHAR(10), GETDATE(), 120)) AND (Activo = 'S') OR
                         (CodLoja = @CodLoja) AND (preco < 0) AND (stock = 'S') AND (QTD > 0) AND (ISNULL(Data_Expira, CONVERT(VARCHAR(10), GETDATE(), 120)) 
                         >= CONVERT(VARCHAR(10), GETDATE(), 120)) AND (estado = 'S') AND (ISNULL(PROMOCAO, 'N') = 'S') OR
                         (CodLoja = @CodLoja) AND (preco > 0) AND (ISNULL(Data_Expira, CONVERT(VARCHAR(10), GETDATE(), 120)) >= CONVERT(VARCHAR(10), GETDATE(), 120)) AND 
                         (estado = 'S') AND (ISNULL(stock, 'N') = 'N') OR
                         (CodLoja = @CodLoja) AND (preco < 0) AND (ISNULL(Data_Expira, CONVERT(VARCHAR(10), GETDATE(), 120)) >= CONVERT(VARCHAR(10), GETDATE(), 120)) AND 
                         (Activo = 'S') AND (ISNULL(PROMOCAO, 'N') = 'S') AND (ISNULL(stock, 'N') = 'N')
ORDER BY Referencia
END
Dragoon

Você executando só vai gerar um linha?
Se sim, tem um exemplo?

Porque minha pergunta na sua SQL tem dois campos de retorno e eu não sei quantos itens vão ser retornados, então, coloque exemplos de retorno!

D

Boa tarde Pessoal.
Ja resolvi a situação
eu estava retornando um IQueryable em vez de uma string como deveria.

pra quem passar pelo mesmo problema é so colocar toString no final da intrução em vez de IQueryable

Abraços

Criado 8 de agosto de 2016
Ultima resposta 19 de ago. de 2016
Respostas 4
Participantes 2