ответ @David упомянул, что использовал WURFL - который является, вероятно, Вашим наилучшим вариантом. Будьте предупреждены, однако, показатель успешности составляет обычно приблизительно 60% (от моего и опыта других). С поставщиками услуг, изменяющими UA постоянно и сумма профилей устройства, которые существуют (60,000 +?), нет никакого пуленепробиваемого способа получить все правильные данные, которые Вы хотите.
Просто немного предупреждения прежде, чем положиться в большой степени на DB устройства. Я попытался бы не торопиться с решением, позволив им изменить опции сессии в случае, если я не угадал.
Я предпочитаю String.Format из-за производительности