[英]LINQ to SQL - Stored Procedure Return Type Error
在SQL 2005上,我有一个简单的SP,可以从表中选择行。 SP不使用临时表或返回多个结果集。 在VS2010中,我将SP从服务器资源管理器中拖动到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
确保您具有:
SET NOCOUNT ON;
作为SP中“ BEGIN”语句之后的第一行。
如果您的SP没有此功能,则它将返回如下消息
'10 Rows affected...'
Linq试图将其解释为函数结果的一部分。 我咬了我很多次!!
这是Linq to SQL的一个已知问题,令人沮丧。 这似乎也有些不可预测。 我可靠地解决此问题的唯一方法是,当我需要它返回结果集时,不让L2S调用存储过程。 我将其称为表值UDF。 L2S似乎没有这些问题,而且我从未在使用它们方面遇到任何问题。
好的,它在实时服务器上失败的原因是与访问DBMS上的元数据所需的特权有关。 这些是从SP创建返回值数据类型所必需的。 通过提升SQL用户帐户,然后将SP拖到DBML设计器上。
采用
创建过程Getxxxxxxx
@xxxxx uniqueidentifier,@ xxxxx uniqueidentifier
set fmtonly off //您查询将fmtonly设置为on
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.