LINQ: выполнение хранимой процедуры, но пропуск курсора внутри - PullRequest
1 голос
/ 13 марта 2012

Я работаю над этим неординарным проектом данных (C # / LINQ / MS SQL).Я получаю очень плохо отформатированный набор данных и работаю над созданием значимых отчетов с данными.Для одного из отчетов («SwitchFlow») я создал Stored Proc под названием «SwitchFlowGenerate».Требуется два параметра: дата отчета и компания происхождения.

В самом конце сохраненного процесса я в конечном итоге использовал курсор (uck) для циклического перемещения по данным, чтобы сгенерировать поле подсчета клиентов.значение.

Когда я запускаю сохраненный процесс в Management Studio, он работает на 100%.Когда у меня есть сохраненный процесс для моего LINQ-to-SQL и он вызывается из консольного приложения Visual Studio C #, он не работает полностью ...

Из моего приложения заполняется сохраненный процесс "SwitchFlowGenerate"таблица отчета, как и должно быть, не возвращает кодов ошибок (в отладке или в процессе производства), но, похоже, она не выполняет часть курсора сохраненного процесса (оставляя поле подсчета клиентов равным нулю).

Я вызываюхранимый процесс из MS SQL Management Studio просто так:

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

из C # / LINQ Я называю это какthis:

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

...