我正在研究这个不稳定的数据项目(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