无法将存储过程表输出到我的.NET应用程序

时间:2016-03-30 13:39:23

标签: c# .net sql-server vb.net stored-procedures

我有一个如下所示的存储过程:

DECLARE @A TABLE ( TabYear int, Std decimal(18,2))
DECLARE @B TABLE ( TabYear int, Std decimal(18,2))

BEGIN 
    DECLARE @FinalTable TABLE (TabYear int, HoldayA decimal(18,2), HolidayB decimal(18,2))

BEGIN
    INSERT INTO @A(TabYear, std)
            Select ... from ...
    INSERT INTO @B(TabYear, Std)
            Select ... from ...
END

INSERT INTO @FinalTable(TabYear, HoldayA, HoldayB) 
    SELECT 
        A.TabYear, a.Std, U.Std 
    FROM
        @A A 
    LEFT JOIN 
        @B U ON a.TabYear = U.TabYear 
END

Select * from @FinalTable

现在,我希望使用DATASET.NET application内的TableAdapter Wizard转换为"Use existing stored procedure"。我选择:Data Column并选择程序(上图),但选择Column1我只获得DataTableAdapter。看起来@Tables无法识别表格。如果我让SP在服务器上运行一切都很好。我按照自己的意愿拿到了桌子。我还检查了向导是否识别我在桌面上工作的其他SP,并且工作正常。但是我不得不承认我使用的所有其他SP都是straigth选择命令没有查询SpanStyleHelper,就像在这个SP中一样。任何人都可以帮我把表格放到我的应用程序中。我没有去使用DataSet必然是将数据转换为数组的代码解决方案,或者某些东西也会帮助我。

2 个答案:

答案 0 :(得分:3)

使用TableAdapter向导无法实现此目的,因为存储过程没有已定义的输出,因为它是动态创建的。您必须在代码中手动构造TableAdapter。

答案 1 :(得分:2)

可能是因为您在sproc中定义的表中SELECT *,因此分析器无法确定架构。定义向导外部的列或更改您的sproc以选择特定列(尽管向导无法确定类型,因此您仍然需要编辑数据表架构)。

可以将sproc变成一个使用子查询而不是填充表变量的SELECT,但这可能是出于性能原因而做的......

  

我没有必要使用DataSet

没关系,但您仍然可以在某些时候将结果集的列映射到C#代码中的结构。

奇才队只带你到目前为止;在某些时候你需要开始施放你自己的法术......