使用UNION ALL SQL查询填充类型化数据集

时间:2010-07-27 08:30:31

标签: sql vb.net dataset union

我在这里有一个奇怪的情况,我希望有人可以帮助我。使用无类型数据集时,我没有遇到同样的问题。

行。我有一个带有类型数据表MyTable的类型化数据集MyDS(TableID,Title,Message)。

该表使用UNION ALL

填充两个表的结果

Select
  TableAID,
  TableATitle,
  Message
FROM TableA

UNION ALL

Select
  TableBID,
  TableBTitle,
  Message
FROM TableB

Dim cmd As SqlCommand = New SqlCommand("SQL", conn)

Dim da AS SqlDataAdapter = New SqlDataAdapter(cmd)
da.Fill(MyDS.MyTable)

查询在SQL Server上运行良好,但是当我单步执行代码时,我发现不正确的TableAID或TableAID。

TableA有1行,TableB有15行。所以我的数据集返回16行(所以基本上它是一个主要细节情况)。除TableAID和TableBID之外,所有列都返回正确的相应数据。

TableAID的值= 100 ,TableBID的 10,11,12,13,......... 24 ,但是当我单步执行时,该

MyDS.MyTable(i).TableID
在16个记录中保持100,而不是100,10,11,12,13,......... 24。标题,消息数据是正确的。 TableAID和TableBID是我的主键。

= 0到15

这是类型化数据集处理UNION的方式吗?我不想创建两个类型化的数据表,并为每个数据表创建单独的SQL并创建关系。

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题。它根本不是数据集。我实际上使用的是从视图中选择的存储过程,我有两个几乎相同的视图(view1和view2)。所以上面的sql来自view2,但是存储过程是使用view1。我使用了观点,因为声明比这复杂。所以我的动机是,如果我有一个复杂的SELECT sql,我需要在我的存储过程中使用它,把它放在视图上并有一个简单的proc来使用。 代码是

            
 Dim cmd As SqlCommand = New SqlCommand("StoredProcedureName", conn)
 cmd.CommandType = CommandType.StoredProcedure


Dim cmd As SqlCommand = New SqlCommand("SQL", conn)

我几乎想用非类型的数据集替换我的类型数据集,因为我的时间已经不多了。最后期限。大声笑 感谢您让我认为它不是数据集,因为您无法弄清楚可能出现的问题。 LOL