Я пытаюсь вернуть одну строку данных (несколько столбцов) из хранимой процедуры.Мне нужно получить доступ к данным из обоих столбцов возвращаемой строки.
Очевидно, я знаю, что могу сделать следующее:
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