我以前使用数据集而不是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
这是我目前的代码,显然不起作用
有什么想法吗?
由于
答案 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。它非常好,示例代码很有用。