Vb.net 如何中断While SqlDataReader.Read循环以返回值,然后返回到循环中的当前位置

Vb.net 如何中断While SqlDataReader.Read循环以返回值,然后返回到循环中的当前位置,vb.net,while-loop,return,sqldatareader,Vb.net,While Loop,Return,Sqldatareader,我正在使用sqldatareader从查询中读取值。我在while循环中有一个条件语句,用于更改listview中超链接文本数据绑定调用的字符串变量。我的问题是,对于sqldatareader.read读入的每一行,我需要将变量“name”的值绑定到超链接。但是,每次我从while循环返回时,读者都会在第一行重新开始。我需要能够返回while循环以传递变量的值,然后继续返回下一行的循环。总的来说,datareader将读取8行,现在它只读取第一行值8次。如果这不可能,你能为我提供一些解决这个问题

我正在使用sqldatareader从查询中读取值。我在while循环中有一个条件语句,用于更改listview中超链接文本数据绑定调用的字符串变量。我的问题是,对于sqldatareader.read读入的每一行,我需要将变量“name”的值绑定到超链接。但是,每次我从while循环返回时,读者都会在第一行重新开始。我需要能够返回while循环以传递变量的值,然后继续返回下一行的循环。总的来说,datareader将读取8行,现在它只读取第一行值8次。如果这不可能,你能为我提供一些解决这个问题的方法吗?这是我的密码

 Conn.Open()
        sql4.Parameters.AddWithValue("@Search", Search)
        sql4.CommandText = "SELECT Distinct Category, Type FROM SubCategory  WHERE (Subcategory.Category LIKE '%' + @Search + '%')"
        Dim reader As SqlDataReader = sql4.ExecuteReader()

        While reader.Read()

            Dim tst As String = reader("Category")

            If reader.IsDBNull(1) Then

                name = "Category"
                Return name

            ElseIf Not reader.IsDBNull(1) Then

                name = "Type"
                Return name

            End If
        End While

我在ListView调用的查询中找到了应该能够做到的建议。当select查询使用一条条件语句运行时,我刚刚创建了一个新列,该语句计算“Type”列是否为null,然后我只是将超链接文本数据绑定到我的新列。这是一段代码

 SELECT DISTINCT Photos.Picture, SubCategory.Category, SubCategory.Type, CASE WHEN SubCategory.Type IS NULL THEN SubCategory.Category ELSE SubCategory.Type END AS linkText FROM SubCategory LEFT OUTER JOIN Photos ON SubCategory.Type = Photos.Type WHERE (SubCategory.Type LIKE '%' + @Search + '%')

再次感谢各位。

如果您从环路返回,您不需要返回。也许您应该为
列表视图使用
数据源
,也许您应该返回一个
数据表
,并每行访问该行。但是您没有提供足够的信息来帮助我。我的问题是,这段代码位于从我的Listview调用的函数中。由于listView也是数据绑定的,因此listView为创建的每一行调用此函数。如果查询返回10个总值,listview将调用我的函数10次。因此,我需要能够返回while循环以发送“name”的值它由查询返回到listview的第一行计算,然后返回上面列出的while循环(计算下一行除外)。您应该将值存储在列表中,然后将该列表用于您的逻辑。@user3841709:为什么这些值不包括在绑定到
listview的原始select中(例如作为联接)?作为解决方法:您可以在每行需要它之前将其加载到
数据表中一次,并通过LINQ.Bc访问它。上面代码中使用的查询严格地评估两列的空值,并根据列“type”中的值是否为空,设置name变量。