2013-09-24 58 views
0

我想查找包含某個參考編號的每個記錄,然後將每個記錄分配給一個會話,以便它可以添加到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 

回答

1

這是一個DataReader不是如何工作

當你枚舉一個讀者,你枚舉字段集合當前記錄,沒有結束的所有記錄。您需要調用reader.Read()來獲取下一條記錄,然後獲取帶有Item property的指定字段,然後使用例如,將值轉換爲特定類型。 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 
+0

感謝您的幫助 – user1342164

+1

*當您通過閱讀器枚舉時,您列舉了當前記錄的字段集合,而不是所有記錄。*這是錯誤的。當您通過'SqlDataReader'(或'OracleDataReader')枚舉時,您可以枚舉所有記錄。沒有必要使用'Read()'方法。 OPs代碼的問題是在枚舉所有記錄的同時調用Read()。 – sloth

+0

哎喲,你說得對。我被Item()弄糊塗了。我認爲這很明顯,我從來沒有以這種方式讀取數據:)。 –

5

reader.Read()for each循環推進讀者到下一條記錄,跳過你感興趣的人。

你不應該修改該集合(在這種情況下,閱讀器)在for each循環中。

+0

感謝您的幫助 – user1342164

+2

這是正確的答案。但我認爲*修改集合*應該被讀取*推進interator,同時已經用'For Each' *迭代序列或類似的東西,因爲沒有實際修改。 – sloth