我有一个如下所示的存储过程:
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必然是将数据转换为数组的代码解决方案,或者某些东西也会帮助我。
答案 0 :(得分:3)
使用TableAdapter向导无法实现此目的,因为存储过程没有已定义的输出,因为它是动态创建的。您必须在代码中手动构造TableAdapter。
答案 1 :(得分:2)
可能是因为您在sproc中定义的表中SELECT *
,因此分析器无法确定架构。定义向导外部的列或更改您的sproc以选择特定列(尽管向导无法确定类型,因此您仍然需要编辑数据表架构)。
你可以将sproc变成一个使用子查询而不是填充表变量的SELECT
,但这可能是出于性能原因而做的......
我没有必要使用DataSet
没关系,但您仍然可以在某些时候将结果集的列映射到C#代码中的结构。
奇才队只带你到目前为止;在某些时候你需要开始施放你自己的法术......