ADO.NET记录导航

时间:2008-11-07 17:52:25

标签: vb.net ado.net recordset

我已经在VB6和VB.NET中进行了开发,并且我在VB6中使用了ADODB对象来处理记录集导航(即MoveFirst,MoveNext等方法),并且我使用了ADO.NET来处理逐行查询(即对于Table.Rows中的每一行......)

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

编辑:为了澄清,我希望用户能够浏览向前或向后移动的查询。循环遍历行是一项简单的任务。

4 个答案:

答案 0 :(得分: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()的当前rowindex,或者b)用每个导航执行一个新的查询(不是一个真正好的选项。)< / p>

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

  • 第一行是DataTable.Rows(0)
  • 最后一行是DataTable.Rows(DataTable.Rows.Count-1)
    • 表示中间的任何行(在应用中存储当前显示的rowindex),然后调用
  • DataTable.Rows(currentRowIndex -1)为previous和
  • DataTable.Rows(currentRowIndex +1)for next。

答案 1 :(得分:2)

这完全取决于用法: 如果只需要列出一个或多个查询的结果,则应使用datareader。 DOK指出,它是只读的,只有foward,所以它很快。 http://www.startvbdotnet.com/ado/sqlserver.aspx

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

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

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

答案 2 :(得分:0)

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

循环其记录

使用DataReader的一个优点是它是一个只进,只读的对象,因此速度快,重量轻。

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

我建议,如果可能的话,如果没有太多,你会立即检索所有记录。这将节省对数据库的重复调用。

另一方面,如果有很多记录,你可以检索前几个(比如10或20),只有当用户点击超出初始设置时,才能用新的数据库调用检索下一组记录。 。这是懒惰的装载。

答案 3 :(得分:0)

以下是使用datareader的快速示例:

            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()