LINQ:执行存储过程,但跳过游标

时间:2012-03-13 14:29:37

标签: linq stored-procedures cursor

我正在研究这个不稳定的数据项目(C#/ LINQ / MS SQL)。我收到一个格式很差的数据集,我正在努力用数据构建一些有意义的报告。对于其中一个报告(“SwitchFlow”),我创建了一个名为“SwitchFlowGenerate”的存储过程。它需要两个参数,即报告的日期和原产地公司。

在存储过程的最后,我最终使用游标(uck)循环数据以生成客户计数字段值。

当我在管理工作室中运行存储过程时,它可以100%运行。当我将存储过程用于LINQ-to-SQL并从Visual Studio C#控制台应用程序调用它时,它不能完全正常工作...

从我的应用程序中,存储过程“SwitchFlowGenerate”按原样填充报告表,不返回任何错误代码(在调试或生产中),但它似乎不执行存储过程的游标部分(留下客户数量)字段为零)。

我从MS SQL Management Studio中调用存储过程,就像这样:

exec switchflowgenerate '03 -13-2012','ace'

从C#/ LINQ我这样称呼它:

db.SwitchFlowGenerate(DateTime.Now,ldc);

(注意:。现在与MSMS中的相同)

代码的光标部分如下所示:

** - 更新客户计数列以反映帐户切换移动

DECLARE @Adjust INT

SET @Adjust = 0

DECLARE @cc nvarchar(100)

DECLARE @stat nvarchar(100)

DECLARE SFC CURSOR FOR SELECT CustomerCount, [Status] FROM SwitchFlow WHERE ReportDate = @rptDate AND LDC = @ldc FOR UPDATE

OPEN SFC

FETCH SFC INTO @cc, @stat

WHILE (@@FETCH_STATUS = 0)

    BEGIN

        IF @stat = 'Dropped' BEGIN SET @Adjust = -1 END

        IF @stat = 'Start' BEGIN SET @Adjust = 1 END

        IF @stat = 'In Queue - To Start' BEGIN SET @Adjust = 1 END

        IF @stat = 'In Queue - To Drop' BEGIN SET @Adjust = -1 END

        IF @stat = 'Reenrolling' BEGIN SET @Adjust = 1 END

        IF @stat = '#### SAME DAY ####' BEGIN SET @Adjust = 0 END


        SET @@StartingTotal = @@StartingTotal + @Adjust


        UPDATE [SwitchFlow] SET CustomerCount = @@StartingTotal WHERE CURRENT OF SFC

        FETCH SFC INTO @cc, @stat


    END

CLOSE SFC

DEALLOCATE SFC**

    Linq generates:
    Generating Data For: ACE on 3/13/2012

    EXEC @RETURN_VALUE = [dbo].[SwitchFlowGenerate] @rptDate = @p0, @ldc = @p1

    -- @p0: Input DateTime (Size = -1; Prec = 0; Scale = 0) [3/13/2012 9:56:59 AM]

    -- @p1: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [ACE]

    -- @RETURN_VALUE: Output Int (Size = -1; Prec = 0; Scale = 0) [Null]

    -- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

非常感谢任何帮助或见解〜特别是如果有人知道如何在没有光标的情况下完成这项工作。

谢谢! TK

0 个答案:

没有答案