繁体   English   中英

使用LINQ-to-SQL从SQL Server存储过程返回单行变量

[英]Returning single row vaues from SQL Server stored procedure with LINQ-to-SQL

我试图从存储过程中返回一行数据(多列)。 我需要从返回的行的两列访问数据。

显然,我知道我可以执行以下操作:

 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

将lessonId设为可为null的int。 然后,您可以将其用作out变量。

int? lessonId = 0;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM