【问题标题】:The selected stored procedure returns no columns, when i try to import my stored procedure inside my asp.net mvc当我尝试在我的 asp.net mvc 中导入我的存储过程时,选定的存储过程不返回任何列
【发布时间】:2014-09-27 03:51:22
【问题描述】:

我的 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 映射到我的 .edmx 文件。

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

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

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

选定的存储过程不返回任何列

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

【问题讨论】:

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


    【解决方案1】:

    试试这个

    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
    

    【讨论】:

      【解决方案2】:

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

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

      这并不理想,但我想我可以调查一下 EF 需要哪些权限,然后考虑这些权限是否是我愿意授予我的一般访问用户的权限。 (换一天)

      【讨论】:

        【解决方案3】:

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

        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 它非常适合我的情况。

        也许你可以试一试。

        【讨论】:

        • 谢谢。这救了我的培根。
        • 这可行,但在我的情况下,我必须在模型浏览器中找到该函数,然后单击返回类型,然后在那里手动更新“获取列信息”。从 db 运行更新模型没有帮助。
        • 太棒了,你帮我省了很多麻烦!为我工作:)
        猜你喜欢
        • 1970-01-01
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        • 2016-11-28
        • 2015-11-30
        • 1970-01-01
        • 1970-01-01
        • 2016-02-11
        相关资源
        最近更新 更多