SQLDataReader查找每一行的值

时间:2010-11-10 08:56:27

标签: asp.net sqldatareader

我以前使用数据集而不是sqldatareaders,我曾经能够做这样的事情

If dataset.tables(0).Rows(0)(1).ToString()) = "N" Then
   lbl.Text = dataset.tables(0).Rows(0)(2).ToString()) 
Else
   'Do Nothing
End If

这显然不适用于sqldatareaders。

我有代码来查看SQLDatareader是否有任何行但是想知道是否有办法获取每行的值

我猜这是可能的,我已经环顾四周但似乎找不到任何东西

Dim conn As SqlConnection = New SqlConnection("server='h'; user id='w'; password='w'; database='w'; pooling='false'")  

conn.Open()  

Dim query As New SqlCommand("DECLARE @investor varchar(10), @sql varchar(1000) Select @investor = 69836 select @sql = 'SELECT * FROM OPENQUERY(db,''SELECT * FROM table WHERE investor = ''''' + @investor + ''''''')' EXEC(@sql)", conn) 

Dim oDR As SqlDataReader = query.ExecuteReader()

If oDR.HasRows or dataset.tables(0).Rows(0)(1).ToString()) = "N" Then
   lbl.Text = dataset.tables(0).Rows(0)(2).ToString())
Else
   'Do Nothing
End If

这是我目前的代码,显然不起作用

有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

使用数据阅读器时,您必须自己逐步浏览每一行。使用HasRows是一个好的开始,因为它会告诉您返回的结果集是否为空。

要遍历结果集,您应该使用Read()方法。如果你在一行,它将返回true,当你移过最后一行时它将返回false。

我的Vb很差,所以我会用C#给你一个例子:

if (oDR.HasRows && oDR.Read()) 
{
  if (oDR.GetString(0) == "N")
  {
    lbl.Text = oDr.GetString(1);
  }  
}

这里我首先检查我们是否有数据结果集,然后尝试移动到第一行。如果成功,我将读取第一列的字符串值并将其与“N”进行比较。如果该值等于“N”,我将lbl变量的Text属性设置为第二列的字符串值。

这应该等同于您使用数据集的算法。我建议您阅读MSDN documentation for the SqlDataReader。它非常好,示例代码很有用。