当我尝试在我的asp.net mvc中导入我的存储过程时,选定的存储过程不返回任何列

时间:2014-08-04 15:49:29

标签: asp.net-mvc entity-framework asp.net-mvc-5 edmx

我的SQL server 2008 r2&中有以下存储过程。 asp.net mvc web应用程序: -

USE [ITSERres]
GO
/****** Object:  StoredProcedure [dbo].[AdvanceSearchSP]    Script Date: 08/04/2014 16:21:12 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
/****** Object:  StoredProcedure [dbo].[AdvanceSearch2]    Script Date: 07/18/2014 10:37:47 ******/


ALTER PROCEDURE [dbo].[AdvanceSearchSP]
        -- Add the parameters for the stored procedure here

        @SearchType nvarchar(10) = null,
        @CustomerID bigint = null,
        @StringCustomerID nvarchar(50) = null,
        @SiteID bigint = null,
        @StateID bigint = null,
        @PrimarycustomerOnly bit = false,
        @RoleID int = null,
        @TypeID int = null,
        @IsManaged bit = null,
        @Name nvarchar(125) = null,
        @NameSelection nvarchar(10) = null,
        @Tag nvarchar(50) = null,
        @TagSelection nvarchar(10) =null,
        @ServiceTag nvarchar(100) = null,
        @ServiceTagSelection nvarchar(10) =null,
        @SerialNumber nvarchar(50) = null,
        @SerialNumberSelection nvarchar(10) =null,
        @Comment nvarchar(250) = null,
        @CommentSelection nvarchar(10) =null,
        @IP nvarchar(50) = null,
        @IPSelection nvarchar(10) = null,
         @MAC nvarchar(50) = null,
         @MACSelection nvarchar(10) = null
    AS
    BEGIN

        SET NOCOUNT ON;
if(@SearchType = 'name')
Begin 
        -- Insert statements for procedure here
    select t.Tag , r.RESOURCENAME , rs.DISPLAYSTATE as StateName, tt.Name as TypeName , sdo.NAME as sitename , accountdef.ORG_NAME as cusotmername, t.IsManaged as ismanaged ,sysinfo.SERVICETAG,r.SERIALNO
  //code goes here...

我做了以下事情: -

  1. 我映射了SP insdie my .edmx文件。

  2. 我右键单击.edmx文件,点击"模型浏览器"。

  3. 在我的模型下,我点击导入功能。

  4. 我右键单击SP,单击编辑。 然后当我点击"获取列信息" ,我收到以下消息: -

  5.   

    所选存储过程不返回任何列

    所以有人可以建议吗? 感谢

3 个答案:

答案 0 :(得分:24)

我也面临同样的问题。仅供参考,我的存储过程包含临时表。 谷歌搜索后,发现这个页面解决了我的问题:

http://forums.asp.net/t/2000731.aspx?EF+4+0+The+selected+stored+procedure+returns+no+columns+when+i+try+to+import+my+stored+procedure+inside+my+asp+net+mvc

建议的解决方案是在存储过程的开头添加SET FMTONLY OFF 它完全符合我的情况。

也许你可以尝试一下。

答案 1 :(得分:0)

我看到了同样的问题,但在我的情况下,结果是我的数据库连接字符串使用了权限有限的用户。 我假设如果没有使用某种级别的权限,EF就无法计算出架构结构。

我将连接字符串更改为具有更高权限的用户,更新了我的EDMX,然后更改回更低级别的用户。

这不太理想,但我想我可以调查以确切了解EF需要什么权限,然后考虑这些是否是我愿意授予我的一般访问权限用户的权利。 (一天又一天)

答案 2 :(得分:0)

试试这个

create proc sp_ExecuteTest
@IdMachines nvarchar(50)
as
SET FMTONLY OFF;
DECLARE @SQLQuery AS NVARCHAR(500)
CREATE table #tempTable(IdMachine int)
SET @SQLQuery = 'insert into #tempTable select IdMachine from MachineMaster where idmachine IN(' + @IdMachines + ')'
EXECUTE sp_executesql @SQLQuery
SELECT * FROM #tempTable
drop table #tempTable