对于每个语句不能正常工作

时间:2013-09-24 14:01:12

标签: vb.net ado.net

我试图找到包含某个参考编号的每条记录,然后为每条记录将其分配给一个会话,以便将其添加到PDF中。当我运行下面的代码时,它只执行1个参考号,即使可能有3条记录需要从中获取数据。知道为什么它没有为每条记录提供它吗? TIA

      cmd = New SqlCommand
            cmd.Connection = Con
            cmd.CommandText = "SELECT [Physician First Name], [Physician Last Name], [Recipient Primary Business Street Address Line 1], [Recipient City], [Recipient State], [Recipient Zip Code] FROM tblData WHERE ReferenceNumber = @ReferenceNumber"
            cmd.Parameters.Add(New SqlParameter("@ReferenceNumber", (ReferenceTextBox.Text)))

    Dim reader As SqlDataReader = cmd.ExecuteReader()

    For Each NPIlookup In reader

                If (reader.Read()) Then

                    Session("DoctorFirstName") = reader(0)


                End If
                Session("PDF") &= Session("DoctorFirstName")

            Next

2 个答案:

答案 0 :(得分:5)

reader.Read()循环中的for each会将读者提升到下一条记录,跳过您感兴趣的记录。

您不应在for each循环期间修改集合(在本例中为读者)。

答案 1 :(得分:1)

这不是DataReader的工作原理

当您通过阅读器进行枚举时,您将枚举当前记录的字段集合,而不是所有记录。你需要调用reader.Read()来获取下一条记录,然后获得一个带有Item property的specig字段,使用例如获取特定类型的值。 GetReader,或使用For Each迭代读者的字段。

点击此处reader's documentation查看示例。

要阅读特定字段,您需要编写如下内容:

While reader.Read()
    Dim firstName=reader.GetString(0)
    ...
End While

迭代字段

While reader.Read()
    For Each value as Object in reader
        ...
    Next        
End While