LINQ to SQL - Ошибка типа возврата хранимой процедуры - PullRequest
1 голос
/ 22 ноября 2011

В 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

Ответы [ 4 ]

2 голосов
/ 22 ноября 2011

Убедитесь, что у вас есть:

SET NOCOUNT ON;

как первая строка в вашем SP после оператора 'BEGIN'.

Если ваш SP не имеет этого, то он возвращает сообщения типа

'10 Rows affected...'

Что Linq пытается интерпретировать как часть результата функции. У меня было много укусов !!

0 голосов
/ 04 января 2012

Использование

процедура создания Getxxxxxxx

@ xxxxx уникальный идентификатор , @ xxxxx уникальный идентификатор

выключено // вы запрашиваете установите fmtonly на

0 голосов
/ 22 ноября 2011

Хорошо, причина его сбоя на работающем сервере заключается в привилегиях, необходимых для доступа к метаданным в СУБД. Они необходимы для создания типа данных возвращаемого значения из SP. Подняв учетную запись пользователя SQL, а затем перетащив SP на конструктор DBML .. Бинго .., это работает!

0 голосов
/ 22 ноября 2011

Это известная проблема, связанная с Linq to SQL, и разочаровывающая.Это также кажется несколько непредсказуемым.Единственный способ, которым я обошел это, надежно, это то, что L2S не вызывает хранимую процедуру, когда мне нужно вернуть набор результатов.Вместо этого я называю табличную UDF.У L2S, похоже, нет проблем с ними, и у меня никогда не было проблем с их использованием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...