URL-запросы
Рассмотрим синтаксис URL-запроса к SQL Server:
http://iisserver/vroot?sql=sqlinstruction[¶m=value[¶m=value]...n] |
Здесь:
- iisserver – имя интернет-сервера;
- vroot – имя виртуального каталога;
- sqlinstruction – любая SQL-инструкция;
- param – имя параметра. Это не параметр SQL-инструкции или хранимой процедуры, это параметр шаблона или один из следующих предопределенных параметров: contenttype, outputencoding, root и xsl;
- value – значение параметра.
Итак, предположим, вы сконфигурировали виртуальный каталог для использования базы данных PUBS и назвали его server_pubs. Положим, ваш компьютер называется server. Попробуем написать первый URL-запрос:
http://server/server_pubs/?sql=select au_fname, au_lname, address from authors where au_fname like 'M%' for xml raw |
Но не все так просто. Ответ будет таким:
XML document must have a top level element. |
Первый блин, как всегда, комом! Дело в том, что XML-документ, формируемый SQL Server’ом, не имеет главного корневого элемента, без которого документ не может считаться правильно оформленным. Для указания корневого элемента нужно добавить параметр root.
http://server/server_pubs/?sql=select au_fname,au_lname,address from authors where au_fname like 'M%' for xml raw&root=my_root |
В ответ будет выдано:
Incorrect syntax near 'M'. |
Что ж, опытные пользователи, наверное, сразу бы приметили знак процента в запросе. Он является зарезервированным символом в имени URL, его код равен 25. Учитывая это, перепишем запрос так:
http://server/server_pubs/?sql=select au_fname,au_lname,address from authors where au_fname like 'M%25' for xml raw&root=my_root |
Ура! Получилось. Результат будет примерно таким же, как в самом первом примере этой статьи.
На случай, если вам нужно получить результаты в виде обычного HTML, можно создать шаблон преобразования на языке XSL и указать еще один параметр в URL – xsl. В качестве значения параметра нужно указать путь относительно выбранной вами виртуальной директории.
Составим шаблон трансформации:
<?xml version="1.0" ?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:template match = "*"> <xsl:apply-templates /> </xsl:template> <xsl:template match = "row"> <li> <table><tr> <td><xsl:value-of select = "attribute::au_fname" /></td> <td><xsl:value-of select = "attribute::au_lname" />.</td> <td>Address: <xsl:value-of select = "attribute::address" /></td> </tr></table> </li> </xsl:template> <xsl:template match = "/"> <html> <body> <ul> <xsl:apply-templates select = "my_root" /> </ul> </body> </html> </xsl:template> </xsl:stylesheet> |
Более подробную информацию о XSL можно найти в [4].
В ответ на следующий URL-запрос вы получите преобразованный XML-документ.
http://server/server_pubs/?sql=select au_fname,au_lname,address from authors where au_fname like 'M%25' for xml raw&root = my_root&xsl = xsl_for_query.xsl |
На самом деле работа с URL-запросами интересна только первые несколько минут. Действительно, очень неудобно возиться со строкой адреса и бесконечными символами процента в ней, к тому же URL-запросы не очень хороши в смысле безопасности. Альтернативой им являются шаблоны.