LINQ to SQL - 存储过程返回类型错误

时间:2011-11-22 11:55:46

标签: c# sql-server-2005 linq-to-sql

在SQL 2005上,我有一个简单的SP,它从表中选择行。 SP不使用临时表或返回多个结果集。在VS2010中,我将SP从Server Explorer拖到DBML设计器,SP被添加到LINQ数据上下文中。一切正常。如果我然后将表和SP脚本编写到另一个实时SQL 2005服务器上,我收到错误“无法检测到以下存储过程的返回类型..”就像我说的,没有临时表或多个结果集通常会产生这个错误。服务器上是否还有其他原因造成这种情况?

SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE PROCEDURE [dbo].[spUsers]
    AS
    BEGIN
        SET NOCOUNT ON;

        SELECT top 100 * from Users
    END

4 个答案:

答案 0 :(得分:2)

确保您拥有:

SET NOCOUNT ON;

作为“BEGIN”声明后SP中的第一行。

如果您的SP没有此功能,则会返回

等消息
'10 Rows affected...'

Linq试图将其解释为功能结果的一部分。我曾经咬过它很多次!!

答案 1 :(得分:0)

这是Linq to SQL的一个已知问题,令人沮丧。它似乎有点不可预测。我可靠地解决这个问题的唯一方法就是当我需要它来返回结果集时,不要让L2S调用存储过程。我让它调用一个表值UDF。 L2S似乎对这些没有任何问题,我从未遇到过使用它们的任何问题。

答案 2 :(得分:0)

好吧,它在实时服务器上失败的原因是与访问DBMS上的元数据所需的特权有关。这些是从SP创建返回值数据类型所必需的。通过提升SQL用户帐户,然后将SP拖到DBML设计器上。宾果..它可以工作!

答案 3 :(得分:-1)

使用

创建程序Getxxxxxxx

@xxxxx uniqueidentifier ,@ xxxxx uniqueidentifier

设置fmtonly off    //你查询

上设置fmtonly