Возврат однострочных значений из хранимой процедуры SQL Server с LINQ-to-SQL - PullRequest
2 голосов
/ 15 апреля 2019

Я пытаюсь вернуть одну строку данных (несколько столбцов) из хранимой процедуры.Мне нужно получить доступ к данным из обоих столбцов возвращаемой строки.

Очевидно, я знаю, что могу сделать следующее:

 foreach (var x in usp_GetNextLessonResults)
 {
    // MANIPULATE DATA HERE
 }

Однако, поскольку будет только одна строкавернулся, я не был уверен, есть ли более простой или лучший способ сделать это.

Я также попытался добавить два параметра OUTPUT в свою хранимую процедуру и попытался ссылаться на них следующим образом:

 int lessonId = 0;
 string importId = String.Empty;

 _db.usp_GetNextLesson(Request.QueryString["regid"], ref lessonId, ref importId)

Однако, это выдало ошибку

Аргумент 2 не может быть передан с ключевым словом ref

для обоих выходных параметров в моем коде C #.

У кого-нибудь есть лучшее или более предлагаемое решение этой проблемы?

ALTER PROCEDURE usp_GetNextLesson
    (@RegistrationID VARCHAR(50),
     @LearnerLessonID INT OUTPUT,
     @ImportID VARCHAR(50) OUTPUT)
AS
BEGIN
    SET NOCOUNT ON

    -- DECLARE @LearnerLessonID INT
    DECLARE @LearnerLessonOrder INT
    DECLARE @LearnerCourseID INT

    SELECT 
        @LearnerLessonID = [LearnerLesson].LearnerLessonID, 
        @LearnerLessonOrder = [LearnerLesson].[Order],
        @LearnerCourseID = [LearnerLesson].LearnerCourseID
    FROM 
        [dbo].[LearnerLesson] WITH(NOLOCK)
    WHERE 
        [LearnerLesson].RegistrationID = @RegistrationID

    DECLARE @NextLearnerLessonID INT

    SELECT TOP 1 
        @NextLearnerLessonID = [LearnerLesson].LearnerLessonID
    FROM 
        [dbo].[LearnerLesson] WITH(NOLOCK)
    WHERE 
        [LearnerLesson].LearnerCourseID = @LearnerCourseID
        AND [LearnerLesson].[Order] > @LearnerLessonOrder
    ORDER BY 
        [LearnerLesson].[Order]

    SELECT 
        [LearnerLesson].LearnerLessonID, [LearningObject].ImportID
    FROM 
        [dbo].[LearnerLesson] WITH(NOLOCK)
    INNER JOIN 
        [dbo].[LearningObject] WITH(NOLOCK) ON [LearnerLesson].LearningObjectID = [LearningObject].LearningObjectID
    WHERE 
        [LearnerLesson].LearnerLessonID = @NextLearnerLessonID
END
GO

1 Ответ

0 голосов
/ 29 апреля 2019

Сделать урок как nullable int. Тогда вы можете использовать его как переменную.

int? lessonId = 0;

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