[英]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.