Visual Studio - EntityFramework - 选定的存储过程不返回任何列

时间:2013-01-24 09:44:17

标签: c# asp.net entity-framework-4

大家好我已经在sql写了我的查询,这给了我一个结果,这是我的查询

SELECT Technology,TechDescription, Technology.TechID, COUNT(Question) AS 
  'Totalposts' FROM Technology LEFT JOIN Question ON Question.TechID = Technology.TechID    GROUP BY Technology.TechID, Technology,TechDescription

enter image description here

我只需将其写入存储过程,如下所示

USE [newForumDB]
GO
/****** Object:  StoredProcedure [dbo].[selectTechQuestions]    Script Date: 01/24/2013 15:06:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

create PROCEDURE [dbo].[selectTechQuestions]
 As
  SET FMTONLY OFF
Begin
  SELECT Technology,TechDescription, Technology.TechID, COUNT(Question) AS 
  'Totalposts'

FROM Technology

LEFT JOIN Questions

ON Questions.TechID = Technologies.TechID

GROUP BY Technologies.TechID, Technology,TechDescription
End

并将其添加到我的模型中,并尝试为该过程添加一个函数,但我收到的消息为The selected stored procedure returns no columns可以帮助我

enter image description here

按照Habib的要求,我试过两种方式,即

1) writing the query in a string and filled the DataSet using SqlCommand and SqlDataAdapter which works fine

2) SqlCommand cmd = new SqlCommand();
cmd.CommandText = "selectTechQuestions";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Connection = con;
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);

第二个给我错误{"Invalid object name 'Questions'."}

1 个答案:

答案 0 :(得分:1)

把你的作为

SELECT Technology AS 'Technology',TechDescription AS 'TechDescription', Technology.TechID AS 'ID', COUNT(Question) AS 
'Totalposts'

FROM Technology

LEFT JOIN Questions

ON Questions.TechID = Technologies.TechID

GROUP BY Technologies.TechID, Technology,TechDescription

所以,很多时候我得到这种类型的概率,当时我已经做到了这一点。 这是愚蠢的解决方案,但我已经提出了我的问题,可能会对你有所帮助....




详细说明
正如我们所知道的那样选择语句返回结果作为单个数据集,即使它来自多个表,即查询如内连接。

  

当数据出现时,多个表中有可能会有来自不同表的两个不同的列具有相同的名称。

这个子句在简单的数据获取方式中没有任何问题,即我们只是使用 DataAdapter SqlCommand ,但实体框架无法处理这个问题,因此,编译器不允许查询包含内部连接或多个表查询。

所以要解决这个问题,我们只需要像在这里一样在每列之前指定一个不同的名称,这样就不会有任何问题导致......