2008-11-07 68 views
1

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

但是现在我似乎陷入了困境。我现在在VB.NET中构建一个程序,我需要使用旧Recordset对象的Move命令的等效功能。 VB.NET是否有某种支持此功能的对象,还是我不得不诉诸使用旧的ADODB COM对象?

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

+0

这是一个桌面应用程序或Web应用程序? – DOK 2008-11-07 18:12:48

+0

桌面。具体来说,就是处理每个月需要处理的记录队列,包括对数据进行可视化验证和分析。 – smbarbour 2008-11-07 18:42:59

回答

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)对每个导航执行一个新的查询(不是一个真正的表现良好的选项)。

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

  • 第一行是DataTable.Rows(0)
  • 最后一行是DataTable.Rows(DataTable.Rows.Count-1)
    • 任何行中之间(存储当前显示在您的应用程序的rowIndex),然后调用以前
  • DataTable.Rows(currentRowIndex -1)
  • DataTable.Rows(currentRowIndex +1)为下。
+0

具体而言,我需要表单上的4个按钮以及状态标签(ADODC控件),它提供旧Recordset对象中存在的MoveFirst,MovePrevious,MoveNext和MoveLast功能。当然,他们还没有消除这种功能。 – smbarbour 2008-11-07 18:06:44

0

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

使用DataReader的优点之一是它是一个只向前的只读对象,所以它快速轻量。

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

我会建议,如果可能的话,你一次检索所有的记录,如果没有太多。这将节省对数据库的重复呼叫。另一方面,如果有大量记录,则可以检索前几个(例如10或20),并且只在用户单击超出初始值时才使用新的数据库调用检索下一组记录组。这是懒加载。

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

这一切都取决于使用情况: 如果您只需要列出一个或多个查询的结果,你应该使用DataReader。 DOK指出,它是只读和前进的,所以速度很快。 http://www.startvbdotnet.com/ado/sqlserver.aspx

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

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

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