1

我已经在 VB6 和 VB.NET 中进行过开发,并且我在 VB6 中使用 ADODB 对象来处理记录集导航(即 MoveFirst、MoveNext 等方法),并且我已经使用 ADO.NET 来处理查询逐行性质(即 For Each Row In Table.Rows ...)

但现在我似乎陷入了两难境地。我现在正在 VB.NET 中构建一个程序,我需要在其中使用旧 Recordset 对象的移动命令的等效功能。VB.NET 是否有某种对象支持此功能,还是我必须求助于旧的 ADODB COM 对象?

编辑:为了澄清起见,我希望用户能够通过查询向前或向后导航。遍历行是一项简单的任务。

4

4 回答 4

2

没有必要回到糟糕的过去。如果你能给出一个伪代码示例,我可以为你翻译成 vb.net。

这是一种通用的方法。

Dim ds as DataSet

'populate your DataSet'

For each dr as DataRow in ds.Tables(<tableIndex>).Rows
  'Do something with the row'

Next

每个编辑 1:用户将导航结果,而不是查询。因此,您想要做的是 a) 获取结果并仅向它们显示 ds.Tables.Row() 的当前行索引,或者 b) 对每个导航执行一个新查询(不是一个真正表现良好的选项。)

每条评论:不,他们没有。但是用户通常不会像这样与数据库交互工作。您将需要获取结果的数据集/表,并使用按钮从数据集/表中检索相关行。

  • 第一行是 DataTable.Rows(0)
  • 最后一行是 DataTable.Rows(DataTable.Rows.Count-1)
    • 对于介于两者之间的任何行(将当前显示的行索引存储在您的应用中),然后调用
  • DataTable.Rows(currentRowIndex -1) 用于先前和
  • DataTable.Rows(currentRowIndex +1) 用于下一个。
于 2008-11-07T17:58:08.177 回答
2

这完全取决于使用情况:如果您只需要列出一个或多个查询的结果,您应该使用数据阅读器。DOK 是否指出,它是只读的和只转发的,所以它很快。 http://www.startvbdotnet.com/ado/sqlserver.aspx

如果您需要浏览记录,您应该使用数据集。 http://www.c-sharpcorner.com/UploadFile/raghavnayak/DataSetsIn.NET12032005003647AM/DataSetsIn.NET.aspx

数据集还具有“断开连接”工作的优势,因此您构建所有逻辑,并且仅在需要数据时调用 Fill 方法。数据集已填充,然后您可以开始处理数据,现在已与数据库断开连接。

希望它有所帮助,布鲁诺·菲格雷多 http://www.brunofigueiredo.com

于 2008-11-07T18:08:47.983 回答
0

在 .Net 中,有很多方法可以做到这一点。我喜欢的一种方法是使用 DataReader,它可以返回多个记录集。您可以使用 While DataReader.Read 遍历其记录。

使用 DataReader 的优点之一是它是一个只进、只读的对象,因此它既快速又轻量。

要允许用户一次浏览所有记录,您不希望在用户浏览时保持打开 DataReader。您可以将 DataReader 记录读入对象。或者,您可以将记录检索到 DataSet 中,并一次显示 DataTable 中的 DataRows。

如果可能的话,我建议您一次检索所有记录(如果不是太多)。这将保存对数据库的重复调用。

另一方面,如果有很多记录,您可以检索前几条(例如,10 或 20 条),并且如果用户点击超出初始集,则仅通过新的数据库调用检索下一组记录。这是延迟加载。

于 2008-11-07T17:56:50.300 回答
0

下面是一个使用数据读取器的简单示例:

            Dim cmd As New OleDb.OleDbCommand(sql, Conn) 'You can also use command parameter here
            Dim dr As OleDb.OleDbDataReader
            dr = cmd.ExecuteReader

            While dr.Read

          ‘Do something with data
          ‘ access fields
          dr("fieldname")
          ‘Check for null
          IsDBNull(dr("fieldname"))

            End While

            dr.Close()
于 2008-11-07T18:04:37.960 回答