【问题标题】:DataTable returning only one row when there must be multiple rows on VB.Net当 VB.Net 上必须有多行时,DataTable 只返回一行
【发布时间】:2013-10-23 08:42:24
【问题描述】:

DataTable在我加载时必须有多行时返回仅一行

Dim comm As New MySqlCommand
Dim conn As New MySqlConnection
With comm
.CommandText = "SELECT tblSupplierPO.supplier_POID, tblSupplier.supplier_name, tblSupplierPO.supplier_PODate, tblCategory.category_description, tblSupplierPOList.part_num, tblSupplierPOList.item_name, tblSupplierPOList.order_qty, tblUnit.unit_name FROM tblSupplierPO INNER JOIN tblSupplierPOList ON tblSupplierPO.supplier_POID = tblSupplierPOList.supplier_POID INNER JOIN tblSupplier ON tblSupplierPO.supplier_id = tblSupplier.supplier_id INNER JOIN tblUnit ON tblSupplierPOList.unit_id = tblUnit.unit_id INNER JOIN tblCategory ON tblSupplierPOList.category_id = tblCategory.category_id WHERE tblSupplierPOList.supplier_POID LIKE  'po-1010'"
.connection = conn
.ExecuteNonQuery
End With

然后将其加载到我的 DataTable...

DataTable1.Load(comm.ExecuteReader)

当我使用消息框对其进行测试时...

MsgBox(DataTable1.Rows.Count)

它只返回一行...但是当我将 commandText 复制粘贴到 PhpMyAdmin SQL 并运行它时,它显示了完整的 5 行。请在这里提供一点帮助...谢谢!

我使用 MS VisualStudio2012

【问题讨论】:

  • 我很确定ExecuteReader 为您提供了一个只进游标,它一次处理一行。要填充数据表,请尝试使用数据适配器。 this page 上的第一个代码示例显示了如何。
  • 另一件事:我向右滚动了几英尺,看到您的查询以 WHERE tblSupplierPOList.supplier_POID LIKE 'po-1010' 结尾。如果您的真实代码在这里替换了用户提供的值,则您对 SQL 注入持开放态度,这并不好。我建议使用准备好的语句,它适用于数据适配器。有一个例子here
  • 另外,你应该知道.ExecuteNonQuery这一行运行查询并给你记录的数量,然后你再次运行它,所以你无缘无故地对你的数据库运行了两次查询.把那条线去掉,不需要。
  • 但我需要使用 DataTable,因为我需要将这些数据显示在 Crystal Report 上,而且我认为使用 DataAdapter 不会显示我的数据在我的 CReport 正确...
  • 请注意,comm.ExecuteReader 将成功填充DataTable 而不会出现问题。 DataAdapter 不是必需的。

标签: mysql vb.net datatable


【解决方案1】:

使用MySqlDataAdapterFill 你的DataTable

【讨论】:

  • 谢谢谢谢谢谢! :) 真的行!非常简单的答案先生!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2013-11-08
相关资源
最近更新 更多