【问题标题】:Populate Typed Dataset wit UNION ALL SQL query使用 UNION ALL SQL 查询填充类型化数据集
【发布时间】:2011-03-21 11:44:18
【问题描述】:

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

好的。我有一个类型化数据集 MyDS 和一个类型化数据表 MyTable(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(<strong>i</strong>).TableID
在 16 条记录中保持 100,而不是 100、10、11、12、13、.......24。标题、消息数据正确。 TableAID 和 TableBID 是我的主键。

i = 0 到 15

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

【问题讨论】:

  • 在您用于单步执行数据表的代码中是否有任何条件逻辑?如果是这样,您是否有机会编辑您的问题以包含它?
  • 没有条件逻辑。我用结果填充网格视图。没什么特别的。
  • 我想我需要查看强类型数据集/数据表背后的代码。

标签: sql vb.net dataset union


【解决方案1】:

我设法修复它。它根本不是数据集。我实际上使用的是从视图中选择的存储过程,并且我有 2 个几乎相同的视图(view1 和 view2)。所以上面的sql来自view2,但是存储的proc使用的是view1。我使用视图是因为该语句比这复杂。所以我的 moto 是,如果我有一个复杂的 SELECT sql 需要在我的存储过程中使用,请将它放在视图中并有一个简单的过程可以使用。 代码是

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

不是


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

我几乎想用无类型的数据集替换我的类型数据集,因为我的时间不多了。截止日期。哈哈 感谢您让我认为这不是数据集,因为您无法弄清楚可能是什么问题。哈哈

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多