0

特定の参照番号を含む各レコードを見つけようとしており、各レコードをセッションに割り当てて、PDF に追加できるようにしています。以下のコードを実行すると、データを取得する必要があるレコードが 3 つある場合でも、1 つの参照番号に対して実行されます。レコードごとに実行しない理由はありますか? ティア

      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
4

2 に答える 2

5

ループ内のは、興味のあるレコードをスキップして、リーダーを次のレコードに進めますreader.Read()for each

for eachループ中にコレクション (この場合はリーダー) を変更しないでください。

于 2013-09-24T14:05:39.217 に答える
1

それは DataReader の仕組みではありません

リーダーを列挙する場合、すべてのレコードではなく、現在のレコードのフィールドのコレクションを列挙します。次のレコードを取得するには、reader.Read() を呼び出す必要があります。次に、Item プロパティを使用して特定のフィールドを取得するか、たとえば、特定の型にキャストされた値を取得します。GetReader、または For Each を使用してリーダーのフィールドを反復処理します。

例については、こちらのリーダーのドキュメントを確認してください。

特定のフィールドを読み取るには、次のように記述する必要があります。

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

フィールドを反復するには

While reader.Read()
    For Each value as Object in reader
        ...
    Next        
End While
于 2013-09-24T14:08:54.010 に答える