SQL Server用.NETデータプロバイダを指定してADO.NETを使った場合、DataReaderでデータを1レコードづつ取得しながら同じコネクションを使ってSQL文を実行しようとすると
 「このコマンドに関連付けられている DataReader が既に開かれています」
 というエラーが発生します。
Using _cn As New SqlConnection
    _cn.ConnectionString = String.Format(ConnectionString, UserID, Password)
    _cn.Open()
    Using _tr As SqlTransaction = _cn.BeginTransaction
        Try
            Dim dr As SqlDataReader
            Using _cmd As New SqlCommand
                Dim sqlString As String = String.Empty
                _cmd.Connection = _cn
                _cmd.Transaction = _tr
                _cmd.Parameters.AddWithValue("userID", UserID.Trim)
                sqlString = "SELECT * FROM hogehoge WHERE USERID=@userID"
                _cmd.CommandText = sqlString
                dr = _cmd.ExecuteReader
            End Using
            Do While dr.Read
                Using _cmd As New SqlCommand
                    Dim sqlString As String = String.Empty
                    _cmd.Connection = _cn
                    _cmd.Transaction = _tr
                    _cmd.Parameters.AddWithValue("userID", dr.Item("USERID").ToString)
                    sqlString = "EXEC hogehoge @userID"
                    _cmd.CommandText = sqlString
                    _cmd.ExecuteNonQuery()
                End Using
            Loop
            dr.Close()
            _tr.Commit()
        Catch ex As Exception
            _tr.Rollback()
            Throw ex
        End Try
    End Using
End Using
このような時は接続文字列に「MultipleActiveResultSets=true」を追加するとエラーを回避できます。