Базовый LINQ to SQL Вопрос: Как вызвать хранимую процедуру и получить единственное возвращаемое значение - PullRequest
0 голосов
/ 22 июля 2010

Я новичок в LINQ, и у меня возникли проблемы с получением правильных результатов из простой (работающей) хранимой процедуры, которая не принимает параметров и возвращает одно целое число.При вызове этого sproc с LINQ его возвращаемое значение всегда равно 0. При запуске с использованием tableadapter или непосредственно на сервере sql он работает, возвращая 6-значные значения, например 120123.

Вот мой код LINQ:

Dim MeetingManager As New MeetingManagerDataContext
Dim MeetingID As Integer = MeetingManager.NewMeetingID().ReturnValue

Вот процедура NewMeetingID:

    ALTER PROCEDURE [dbo].[NewMeetingID]
AS
SET NOCOUNT ON
BEGIN

    BEGIN TRANSACTION

    SELECT UniqueNumber
    FROM tblTakeANumber
    WHERE NumberID = 1

        BEGIN
            UPDATE tblTakeANumber SET UniqueNumber = UniqueNumber + 1
            WHERE (NumberID = 1)
        END

    COMMIT TRANSACTION

    RETURN
END

Я что-то пропустил?

1 Ответ

4 голосов
/ 22 июля 2010

Возвращаемое значение - это значение, которое возвращает хранимая процедура, например:

create procedure TestProc()
as 
return 1

Но ваша хранимая процедура, вероятно, выбирает результат, например:

create procedure TestProc()
as 
select 1 as Col1

Для извлечения первойстолбец, укажите его по имени:

Dim Col1 As Integer = TestDataCintext.TestProc().Single().Col1

РЕДАКТИРОВАТЬ: В соответствии с вашим комментарием, вот как вы можете изменить хранимую процедуру, чтобы вернуть целое число.Обратите внимание на (updlock) и уровень изоляции:

ALTER PROCEDURE [dbo].[NewMeetingID]
AS
SET NOCOUNT ON
BEGIN
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ

    BEGIN TRANSACTION

    declare @UniqueNumber int

    SELECT  @UniqueNumber = UniqueNumber
    FROM    tblTakeANumber (updlock)
    WHERE   NumberID = 1

    UPDATE  tblTakeANumber 
    SET     UniqueNumber = @UniqueNumber + 1
    WHERE   NumberID = 1

    COMMIT TRANSACTION

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