ГЛАВА 9 XML И .NET

Вероятно, большинство читателей уже знакомы в той или иной мере с расширяемым языком разметки (extensible Markup Language — XML). По сути, пользователи встречаются с ним уже при установке среды Visual Studio .NET или CLR, даже если и не подозревают об этом. В свое время XML считался панацеей от всех бед, способной решить все проблемы обмена данными, независимо от используемой платформы или аппаратного обеспечения. На начальном этапе развития XML эти необоснованные ожидания породили массу избыточных и совершенно бесполезных затрат при создании приложений с применением XML. Разработчики стали повсюду использовать дескрипторы XML без учета их реальной необходимости для конкретных бизнес-ситуаций или технических причин. Мощь XML заключается в эффективном использовании метаданных и структурированных элементов для хранения данных. XML не является языком программирования, поскольку не содержит никаких директив для выполнения каких-либо действий, а потому обладает полной независимостью от используемой платформы.

Разработчики, имеющие большой опыт работы с HTML, смогут легко понять преимущества надежного и эффективного использования XML. Пространство имен представлено элементом с префиксом xmlns:, оно содержит уникальное имя для контейнера, который предлагает функции и/или данные аналогично имени класса в языке Visual Basic. В среде Visual Basic .NET этот подход упрощается за счет использования расширенного набора классов для синтаксического анализа и манипулирования данными в формате XML. Рассмотрим обычный файл конфигурации web.config. Он имеет формат XML, а не "унаследованный" формат файла конфигурации.ini, хотя доступ к его данным можно осуществить с помощью аналогичных простых методов. Основное отличие заключается в том, что файл web.config обладает большими возможностями для расширения. Доказательством этого отличия является то, что управление файлом web.config осуществляется так же, как и любым другим документом в формате XML, хотя результаты подобных манипуляций могут быть совершенно иными.

Основным преимуществом формата XML (и его аналогов, соответствующих протоколу Simple Object Access Protocol – SOAP) является его нейтральность. Благодаря этому всегда можно создать приложение с расширением логики путем расширения данных, а не создания уникального кода для доступа к централизованно хранящимся данным.

В настоящей главе основное внимание сосредоточено на использовании XML в целях идентификации данных для приложений и пользователей. В ней описываются способы применения XML на платформе.NET в практических ситуациях. Более глубокое описание способов взаимодействия с базами данных и наборами данных DataSet с помощью классов модели ADO.NET приведено в главе 10, "ADO.NET и XML".

В настоящее время описанию XML посвящено много книг и ресурсов. Поэтому вместо подробного рассмотрения этой темы основное внимание в этой главе уделяется вопросам интеграции XML с платформой .NET. Читатели, которые хорошо знакомы с основами XML, могут пропустить обзорные разделы вплоть до раздела с описанием классов XML для платформы .NET.

Обзор XML

Язык XML предназначен только для работы с данными. Точнее говоря, он предназначен для создания набора сведений, или метаданных, которые описывают данные. Рассмотрим приведенный ниже простой фрагмент кода на языке HTML.

Этот фрагмент содержит определение элемента form с атрибутами name, action и method. Атрибуты описывают отдельные элементы формы, сообщают Web-броузеру о выполняемых с ней действиях и являются простейшим примером метаданных. Обратите внимание на замыкающий дескриптор , который обозначает конец контейнера элементов формы. В данном примере form – это универсальный контейнер с универсальными элементами. Экземпляр контейнера form образуется при размещении данных в его структуре.

В приведенном ниже коде показан способ использования элементов и атрибутов XML для описания конкретного фрагмента данных. В нем создается профиль пользователя, который сохраняется в виде узла. Узел (или элемент) Person содержит атрибуты, которые описывают данного пользователя.

Обратите внимание, что вся информация, независимо от конкретного пользователя, хранится в элементе Person. Любое приложение, которое может анализировать данные в формате XML (а это подвластно практически любому современному коммерческому приложению для работы с данными), способно извлечь из этого кода сведения о пользователе: имя, фамилию, адрес и номер телефона. Кроме того, поскольку с этим пользователем никакие другие данные не связаны, все сведения заканчиваются замыкающим дескриптором . В формате XML к синтаксису предъявляются очень строгие требования, например если не указать замыкающий дескриптор или пропустить какой-то элемент, то чтение всего документа может закончиться неудачей.

НА ЗАМЕТКУ

Семантика XML интересна тем, что на элемент можно ссылаться как на узел и наоборот. В некоторых публикациях элемент также называют дескриптором. Во избежание путаницы здесь и далее используются только термины "элемент" и"узел".

Элементы не только могут иметь атрибуты, но и подчиненные элементы; аналогично, подчиненные элементы могут иметь свои собственные атрибуты, как показано в листинге 9.1.

Листинг 9.1. Пример элемента Person с подчиненными элементами

 lastName = "Doe"

 address1 = "123 Main Street"

 address2 = ""

 city = "Sometown"

 state = "ОН"

 zip = "22222"

 phone = "111-242=5512"

 

  

  

Как видите, элемент Person здесь нужно закрыть явно, потому что изменился диапазон контейнера, т.е. теперь он содержит сведения о заказах orders. Приведенный в листинге 9.1 код является нейтральным, т.е. не содержит никакой информации о приложении, только данные и метаданные.

НА ЗАМЕТКУ

Языку XML посвящено множество материалов, опубликованных в печатных изданиях и в Internet. Прекрасное введение в XML можно найти по адресу: http://www/w3.org/XML/1999/XML-in-10-points.html. Вот несколько других адресов Web-узлов, которые содержат наиболее полные сведения по этой теме:

• Web-узел консорциума World Wide Web Consortium http://www/w3.org) содержит официальные и хорошо документированные спецификации XML;

• Web-узел компании Microsoft (http://msdn.microsoft.com) содержит постоянно обновляемые ресурсы, которые охватывают все вопросы использования XML и родственных технологий с программными продуктами Microsoft;

• Web-узел компании TopXML/VBXML.com (http://www.vbxml.com) предлагает разные ресурсы и примеры кодов для работы с технологией XML.

Семейство технологий XML

Язык XML не одинок и сосуществует с несколькими другими родственными технологиями.

• XML Path Language (XPATH) предлагает способ извлечения информации из XML-документа. Хотя синтаксис XPATH радикально отличается от синтаксиса XML, он работает аналогично SQL-запросам.

• Extensible StyleSheet Language Transformations (XSLT) предлагает способ преобразования (т.е. вставки, удаления или изменения) данных XML-документа в данные, которые могут использоваться в другом XML-документе. XSLT может использовать технологию XPATH для извлечения преобразуемых данных.

• Extensible StyleSheet Language (XSL) — это XSLT плюс объекты, которые позволяют разработчику описывать способ отображения информации в броузере или другом XSL-совместимом приложении.

• Document Object Model (DOM) содержит стандартный набор функций, которые позволяют программными средствами извлекать данные из XML- или HTML-документа.

• Simple Object Access Protocol (SOAP) – это спецификация вызовов Web-служб или других Web-ориентированных приложений и служб, а также форматирования отклика. Более подробно SOAP рассматривается в главе 12, "Web-службы и технологии промежуточного уровня".

РИС. 9.1. Иерархия технологий XML, XSL, XSLT u XPATH


На рис. 9.1 показана взаимосвязь между технологиями XML, XSL, XSLT и XPATH в приложении на основе XML. (Более подробно такие приложения рассматриваются далее, в разделе о классах XML на платформе .NET.) Обратите внимание, что XML-документ является источником данных, т.е. содержит отображаемые в приложении данные. XPATH-запрос элементов People/Person используется для сбора сведений обо всех элементах Person из XML-документа. XSL-стиль окружает данные элементами с указанием шрифта с помощью XSL-страницы стиля. После анализа и обработки полученный результат возвращается в формате HTML.

ВНИМАНИЕ!

Учтите, что XML имеет очень строгие правила, причем все имена нужно приводить с учетом регистра символов.

Для демонстрации этой взаимосвязи вставьте код из листингов 9.2 и 9.3 в файлы simple.xml и simple.xsl, которые располагаются в одном каталоге. Откройте файл simple.xml в Web-броузере Internet Explorer версии 6.0 или выше. Результат выполнения этих действий будет иметь вид, представленный на рис. 9.1.

ЛИСТИНГ 9.2. Файл simple.xml

 

  John Doe

 

 

  Jane Doe

  

Обратите внимание, что страница стиля связана с XML-документом. С помощью .NET-классов для XML или MSXML-анализатора Visual Basic можно динамически изменять результаты с представлением их в нескольких разных форматах (например, WML).

ЛИСТИНГ 9.3. Файл simple.xsl

 

  

  

 

 

Строка select="People/Person" — это XPATH-запрос, который представляет собой эквивалент SQL-команды SELECT People FROM Person. Для циклического обхода всех элементов применяется команда xsl:for-each из спецификации XSL. В отличие от XML, в котором нет программных директив, в XSL предусмотрен целый набор директив, который может быть расширен благодаря сценариям для предоставления дополнительной функциональности.

XML и доступ к данным

Обладая этими базовыми знаниями об XML и зная способы их использования, можно применить их в реальных приложениях для работы с данными. XML-анализатор способен считать данные в формате XML, и они будут иметь одинаковый смысл в любом приложении. Эта гибкость сокращает необходимый для работы с данными код, улучшает сопровождение и поддержку программ.

Когда создатели платформы .NET планировали следующую версию интегрированной среды разработки, такая гибкость была одним из основных требований. Теперь практически все элементы платформы .NET используют XML для обмена информацией. Среда CLR использует XML-файлы для указания параметров приложения. Объекты DataSet возвращаются как XML-документы, которые могут записываться в виде строки или документа. XML Web-службы удовлетворяют открытому стандарту SOAP, который в конечном итоге означает, что код объекта для платформы Windows может быть расширен для использования на любой другой платформе, которая поддерживает HTTP- или SOAP-запросы.

XML не предлагает никаких новых революционных способов изменения способов доступа к данным, а лишь иначе использует известные способы сбора и сохранения данных. Более подробная информация о применении компонентов XML с моделью ADO.NET предлагается в главе 10, "ADO.NET и XML".

Классы XML на платформе .NET

На платформе .NET язык XML применяется для повышения производительности, совместимости с открытыми стандартами и интеграции с ADO.NET. Для этого предусмотрены специализированные классы и пространства имен. Для перечисления всех имеющихся пространств имен, классов, методов, свойств, перечислений, интерфейсов и делегатов потребовалось бы привести огромную таблицу, что в целом было бы крайне неэффективным способом расходования пространства и времени. Вместо этого здесь и далее описывается несколько основных классов платформы .NET Framework, предназначенных для работы с XML. На основе этих классов далее приводится несколько примеров эффективного использования XML с иллюстрацией причин, по которым разработчики платформы .NET Framework из компании Microsoft создали их именно такими.

В этом разделе приводятся примеры выполнения задач, связанных с созданием приложений для XML, XSL, XSLT и XPATH. (В замечании из предыдущего раздела приводятся ссылки на некоторые ресурсы с более подробным описанием этих технологий.) Как уже отмечалось, основная цель XML заключается в структурировании и описании данных. Для этого на платформе .NET Framework предусмотрены классы пространства имен System.xml. В приведенных далее примерах используются некоторые другие новые компоненты Visual Basic .NET, которые подробно комментируются.

Применение модели Document Object Model

С появлением модели Document Object Model (DOM) значительно упростилось создание динамически генерируемых Web-узлов, благодаря приданию дополнительных функциональных возможностей статическим элементами в документах HTML/XML. Простая строка кода document.location сценария JavaScript выполняет обход всех элементов Web-страницы, начиная с самого верха объекта document и заканчивая поиском свойства location. Этот способ программируемого доступа к объектам Web-страницы был в определенной степени революционным. Затем появился XML со строгими правилами и динамической объектной моделью, на основе которой автор документа определял корневой или родительский элемент.

В примерах оставшейся части главы с помощью утилиты SQLXML создается XML-документ с именем simple2.xml. Ручное кодирование больших HTML-страниц — это довольно скучное и утомительное занятие, при котором нужно тщательно следить за форматом всех данных. Однако XML обладает несомненным достоинством: нет необходимости беспокоиться о том, что в документ попадет какая-то дополнительная ненужная информация, как это обычно бывает при создании Web-страниц с помощью некоторых HTML-редакторов.

В листинге 9.4 приведен текст простого XML-документа simple2.xml. Расположение символов конца строки на самом деле не имеет никакого значения, потому что аналогично другим языкам программирования XML использует специализированные символы для обозначения строк. Например, в С++, Java и JavaScript для разделения строк используется точка с запятой, а в XML единой строкой считаются все символы между открывающим < и закрывающим дескрипторами.

ЛИСТИНГ 9.4. Файл simple2.xsl

 

 

  

 

  

 

 

  

  

 

  

Информация в листинге 9.4 взята из базы данных Novelty, описанной в главах 1-3, с помощью приведенного ниже запроса.

SELECT ТОР 10 * FROM tblCustomer FOR XML AUTO

Затем в него вручную добавлен элемент . Далее, в разделе об утилите SQLXML, показано, как для любого XML-документа автоматически создается корневой элемент.

В следующем примере рассматривается класс XMLDocument, с помощью которого осуществляется доступ к XML-данным и документам на платформе .NET Framework. В простейшем случае XML-данные из документа или строки в оперативной памяти загружаются с помощью метода Load класса XMLDocument.

Применение технологии XPATH

Что происходит после загрузки XML-документа? В пространстве имен System.xml предусмотрены классы xmlNode и xmlNodeList. С помощью этих классов и технологии XPATH происходит считывание XML-документа и извлечение интересующих нас данных. В листинге 9.5 показано простое приложение Visual Basic .NET, которое загружает XML-документ из файла simple2.xsl и выводит все имена (атрибут FirstName) в текстовом поле.

ЛИСТИНГ 9.5. Пример использования классов XmlDocument И XmlNode

Imports System.Xml 

Imports System.Xml.XPath 

Imports System.IO


Public Class Form1

 Inherits System.Windows.Forms.Form

' Здесь опущен код, сгенерированный Windows Form Designer.

 Private Sub Form1_Load(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles MyBase.Load

  Dim xDoc As New XmlDocument()

 xDoc.Load("simple2.xml")

  ' Обратите внимание, что для получения значения 

  ' атрибута используется синтаксис XPATH.

  Dim xNodeList As XmlNodeList = _

  xDoc.SelectNodes("descendant::tblCustomer/@FirstName")

 Dim xNode As XmlNode

 Dim i As Integer = 0

 For Each xNode In xNodeList

  lstResults.Items.Insert(i, xNode.InnerText)

  i = i + 1 Next

  End Sub 

End Class

Для выполнения этого кода создайте новый проект, форму, а в форме — поле со списком lstResults. Поместите код подпрограммы Form1_Load из листинга 9.5 в код формы. После компоновки и запуска приложения в поле со списком будут показаны результаты, показанные на рис. 9.2 (при условии, что в каталоге выполняемого файла находится файл simple2.xml).

РИС. 9.2. Результаты выполнения кода из листинга 9.5


Как видите, загрузка XML-документа и циклический обход его данных не представляют собой большой проблемы. А как можно изменить данные в XML-документе? Ответ на это вопрос основан на комбинации использованных ранее классов.

НА ЗАМЕТКУ

Далее код подпрограммы Form1_Load из листинга 9.5 переносится в код подпрограммы showTоp10 (листинг 9.6).

В листинге 9.6 приведен измененный код данного примера, в котором можно изменять и сохранять значение каждого узла в XML-документе. В этом достаточно простом примере используются чрезвычайно эффективные и надежные средства изменения XML-документа. Помимо упомянутых выше изменений, в данное приложение также включены кнопки btnShowTop10 и btnChangeAndSave для вызова отдельных подпрограмм отображения и изменения данных. После создания новых кнопок, компоновки проекта и запуска приложения щелкните на кнопке ShowTop10. После выполнения этих действий в поле со списком будут представлены результаты, показанные на рис. 9.2. (Учтите: это возможно лишь при условии, что в каталоге выполняемого файла находится файл simple2.xml.) Для редактирования одного из значений щелкните дважды на том элементе списка, который нужно изменить. Затем в диалоговом окне ChangeAndSave введите новое имя и щелкните на кнопке OK. После этого в поле со списком будет отображено обновленное состояние XML-документа с измененными значениями списка.

ЛИСТИНГ 9.6. Код приложения XMLDomSample

Imports System.Xml 

Imports System.Xml.XPath 

Imports System.IO


Public Class Form1

 Inherits System.Windows.Forms.Form

 ' Здесь опущен код, сгенерированный Windows Form Designer.

 Private Sub Form1_Load(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles MyBase.Load


 End Sub


Private Sub ShowTop10()

  Dim xDoc As New XmlDocument()

 xDoc.Load("simple2.xml")

  ' Обратите внимание, что для получения значения атрибута 

  ' используется синтаксис XPATH.

  Dim xNodeList As XmlNodeList = _

  xDoc.SelectNodes("descendant::tblCustomer/@FirstName")

  Dim xNode As XmlNode

  Dim i As Integer = 0

  For Each xNode In xNodeList

  lstResults.Items.Insert(i, xNode.InnerText)

  i = i + 1

 Next

 End Sub


 Public Sub ChangeNameandSave(ByVal NameToChange As String, ByVal ChangeTo _

  As String)

  Dim xDoc As New XmlDocument()

  xDoc.Load("simple2.xml")

  Dim xNodeList As XmlNodeList = _

  xDoc.SelectNodes("descendant::tblCustomer/@FirstName")

 Dim xNode As XmlNode

 For Each xNode In xNodeList

  If xNode.InnerText = NameToChange Then

   xNode.Value = ChangeTo 

  End If

  Next

  xDoc.Save("simple2.xml")

 MsgBox("Name change saved!", 0)

  lstResults.Items.Clear()

 ShowTop10()

 End Sub


 Private Sub btnShowTop10_Click(ByVal sender As System.Object, _

 ByVal e As System.EventArgs) Handles btnShowTop10.Click

  ShowTop10()

 End Sub


 Private Sub lstResults_DoubleClick(ByVal sender As Object, _

  ByVal e As System.EventArgs) Handles lstResults.Doubleclick

  Dim oldName As String = _

  lstResults.GetItemText(lstResults.Items.Item(lstResults.SelectedIndex))

 Dim newName As String = _

  InputBox("Please enter a new name", "ChangeAndSave")

  ChangeNameandSave(oldName, newName)

 End Sub

End Class

НА ЗАМЕТКУ

уже сообщалось ранее, коды всех примеров можно найти на Web-странице Издательского дома "Вильяме" адресу: http://www.williamspublishing.com.

Утилита SQLXML

Утилита SQLXML версии 3.0 представляет собой еще один способ сбора и генерации XML-документов. Она не может заменить средства ADO.NET, а является лишь расширением функций SQL Server с помощью интерфейса броузера для создания отчетов, отслеживания выполняемых действий и т.п.

Для использования утилиты SQLXML необходимо инсталлировать Web-сервер Internet Information Server (IIS) и СУБД SQL Server 2000, в состав которой и входит эта утилита. В данном примере используется компьютер с операционной системой Windows XP Professional, IIS 5.1 и утилита SQLXML версии 3.0.

Утилита SQLXML расширяет функции СУБД SQL Server 2000 возможностями создания запросов к базе данных на основе HTTP-запросов. Хотя она обладает многими преимуществами, некоторые опасения у разработчиков вызывают вопросы обеспечения безопасности. Большинство этих опасений можно устранить за счет использования системы аутентификации Windows для виртуальных каталогов, в которых выполняются запросы, и для базы данных.

НА ЗАМЕТКУ

Утилиту SQLXML версии 3.0 можно бесплатно скопировать с Web-узла компании Microsoft ПО адресу: http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/824/msdncompositedoc.xml.

Инсталляция и конфигурирование утилиты SQLXML

После копирования файла с утилитой SQLXML с Web-узла компании Microsoft щелкните дважды кнопкой мыши на нем. На экране появится программа-инсталлятор с несколькими стандартными вопросами, например: согласны ли вы с предлагаемой лицензией и хотите ли вы выполнить обычную или специализированную инсталляцию? Единственное отличие между типами инсталляции заключается в том, что в специализированной инсталляции можно указать другой каталог размещения файлов утилиты.

Для конфигурирования утилиты SQLXML выполните следующее. Выберите команду Start→Microsoft SQL Server→Configure SQL XML Support in IIS (Пycк→Microsoft SQL Server→Конфигурировать поддержку SQL XML в IIS), на экране появится диалоговое окно IIS Virtual Directory Management for SQL Server (Виртуальный каталог управления IIS для SQL Server) программы Microsoft Management Console (рис. 9.3).

РИС. 9.З. Диалоговое окно IIS Virtual Directory Management for SQL Server программы Microsoft Management Console


Обратите внимание на то, что панель в правой части окна содержит только один столбец Computer. Щелкните дважды левой кнопкой мыши на имени компьютера в этом столбце для раскрытия списка всех Web-узлов данного компьютера, как показано на рис. 9.4. Обратите внимание: имя текущего столбца в правой части окна изменилось и он стал называться Web Site Name (Имя Web-узла).

РИС. 9.4. Список Web-узлов


Щелкните дважды на надписи Default Web Site (Используемый по умолчанию Web-узел), которая показана на рис. 9.5, для отображения списка конфигурированных виртуальных каталогов в правой части окна.

РИС. 9.5. Используемый по умолчанию Web-узел


Далее создайте новый каталог c:\inetpub\wwwroot\novelty. Для этого выберите команду Start→Run, введите команду cmd, щелкните на кнопке OK, введите в режиме командной строки команду mkdir с:\inetpub\wwwroot\novelty и нажмите клавишу . Аналогично внутри этого каталога создайте подкаталог Templates.

Для конфигурирования нового виртуального каталога щелкните правой кнопкой мыши на узле Default Web Site в левой части окна и выберите в контекстном меню команду New→Virtual Directory (Создать→Виртуальный каталог), как показано на рис. 9.6.

Рис. 9.6. Выбор команды New→VirtualDirectory


После выбора виртуального каталога на экране появится новое диалоговое окно New Virtual Directory Properties (Свойства нового виртуального каталога) с шестью вкладками. В первой вкладке, General, предлагается ввести имя виртуального каталога, а также путь к локальному каталогу, где располагаются файлы. Введите в текстовом поле Virtual Directory Name (Имя виртуального каталога) имя Novelty, а в текстовом поле Local Path (Локальный путь) укажите путь к локальному каталогу с:\inetpub\wwwroot\novelty, как показано на рис. 9.7.

РИС. 9.7. Указание имени виртуального каталога и пути к нему


Далее щелкните на вкладке Security (Безопасность) в верхней части диалогового окна и выберите переключатель Use Windows Integrated Authentication (Использовать интегрированную систему аутентификации Windows). На этом этапе предполагается, что при установке SQL Server был выбран смешанный режим аутентификации Mixed-Mode Authentication или режим аутентификации Windows Authentication. Выбор каждого из этих режимов определяется предпочтительным уровнем безопасности. Если безопасность не имеет существенного значения, например СУБД не связана с внешней сетью, то в таком случае подойдет первый режим. Он позволяет кэшировать параметры подключения аналогично строке подключения. Третий режим, HTTP-Based Basic Authentication (Аутентификация на основе HTTP), базируется на учетной записи SQL Server. На рис. 9.8 показан выбор режима аутентификации Windows Authentication.

Выберите вкладку Data Source (Источник данных) и укажите используемый экземпляр СУБД SQL Server и базу данных. В текстовом поле SQL Server оставьте предлагаемое по умолчанию имя (local).

РИС. 9.8. Параметры системы обеспечения безопасности


НА ЗАМЕТКУ

Имя (local) является "дружественным" именем сервера, который запущен на локальном компьютере. Если SQL Server сконфигурирован для репликации данных в качестве подписчика или издателя данных, то вместо дружественного имени нужно указать фактическое имя компьютера.

Далее в поле со списком Database (База данных) выберите базу данных Novelty, как показано на рис. 9.9. Учтите, что в нем перечислены те базы данных, которые соответствуют параметрам подключения и режиму безопасности.

Выберите вкладку Settings (Параметры) и установите флажки параметров Allow URL queries (Разрешить запросы в URL-указателях), Allow template queries (Разрешить запросы из шаблонов) и Allow XPath (Разрешить Xpath-запросы), как показано на рис. 9.10.

Наконец, выберите вкладку Virtual Names (Виртуальные имена). Щелкните на кнопке New в области окна Defined virtual names (Заданные виртуальные имена). В текстовом поле Virtual Name (Виртуальное имя) диалогового окна Virtual Name Configuration (Конфигурация виртуального имени) введите имя templates. В поле со списком Туре (Тип) выберите тип Template (Шаблон), а в текстовом поле введите c:\inetpub\wwwroot\novelty\templates, как показано на рис. 9.11. Для сохранения указанных параметров щелкните на кнопке Save.


РИС. 9.9. Параметры источника данных

РИС. 9.10. Вкладка Settings

РИС. 9.11. Диалоговое окно Virtual Name Configuration


После этого диалоговое окно New Virtual Directory Properties будет иметь вид, показанный на рис. 9.12. Щелкните на кнопке OK для его закрытия.

Таким образом, успешно сконфигурирован виртуальный каталог с помощью IIS. Теперь можно корректно выполнять SQL-запросы к базе данных SQL Server. Если дважды щелкнуть на узле Default Web Site в левой части диалогового окна IIS Virtual Directory Management for SQL Server программы Microsoft Management Console, то его правая часть будет иметь такой вид, как на рис. 9.13. Закройте диалоговое окно IIS Virtual Directory Management for SQL Server.

Рис. 9.12. Диалоговое окно New Virtual Directory Properties после конфигурирования виртуального каталога

Рис. 9.13. Диалоговое окно IIS Virtual Directory Management for SQL Server программы Microsoft Management Console после конфигурирования параметров Web-узла Novelty

Результаты конфигурирования

Рассмотрим теперь, что же получилось в результате конфигурирования параметров Web-узла Novelty. Откройте Web-броузер Internet Explorer версии 6.0 или выше. Полученный результат будет выглядеть, как показано в листинге 9.4. Файл simple2.xml был создан именно так. Введите приведенный ниже URL-указатель для просмотра структуры файла.

http://localhost/Novelty?sql=select top 10 * from tblCustomer FOR XML AUTO&root=customer

Обратите внимание, что параметр root в конце данного URL-указателя содержит корневой элемент XML-документа. Без него довольно трудно отображать результаты HTTP-запросов в окне Web-броузера.

Применение XML, XSLT и SQLXML для создания отчета

Попробуем теперь применить описанные ранее сведения в практической ситуации, например для создания списка адресов клиентов. Как будет показано далее, изменение HTML-содержимого с помощью XSL-файла не вызывает больших трудностей. Поэтому такой способ часто применяется для форматирования страниц, которые предполагается распечатать, или вместе с JavaScript/ASP.NET для повышения функциональности и надежности.

SQL Server предоставляет данные в формате XML, а для сохранения запроса используется шаблон в файле noveltytemplate.xml. Единственным назначением этого файла является сбор данных и присвоение страницы стиля.

 

 

  SELECT FirstName, LastName, Address, City, State FROM tblCustomer FOR XML AUTO

  

В первой строке задается базовый XML-документ и способ связывания со страницей стиля, который аналогичен применению элемента xml:stylesheet в листинге 9.2. Следующий элемент sql:query является контейнером команды SQL или выполняемого запроса. Предложение FOR XML AUTO сообщает SQL Server о возвращении результатов в формате XML. В шаблоне предполагается, что корневой элемент называется root, поэтому его не нужно указывать в шаблоне запроса.

НА ЗАМЕТКУ

Для динамического присвоения страницы стиля с помощью SQLXML нужно добавить в URL-указатель параметр запроса xsl= и указать используемый файл в формате http://имя_компьютера/виртуальный_каталог_шаблонов/имя_шаблона.xml?xsl=имя файла_стиля.xsl.

В листинге 9.7 показана страница стиля XSL, которая используется для создания итогового XML-документа. Для указания атрибута в ней применяется технология XPATH. С помощью синтаксиса CSS и HTML создается формат представления извлеченной информации в окне Web-броузера.

ЛИСТИНГ 9.7. Файл noveltyxsl.xsl

 

   

 

  

 

  

  

  

  

   

   

   

 

 

 

 

   

   

  

   

   

    

    

    

    

    

    

    

   

   

    
Customers
First name Last name Address City State

    

  

   

Разместите оба файла (noveltytemplate.xml и noveltyxsl.xsl) в подчиненном каталоге templates виртуального Web-каталога Novelty, который описывается в предыдущем разделе. После этого откройте Web-броузер Internet Explorer версии 6.0 или выше и введите в нем следующий URL-указатель:

http://localhost/Novelty/templates/noveltytemplate.xml?contenttype=text/html

Параметр contenttype используется для указания формата представления конечного результата, т.е. в виде HTML-страницы. После выполнения описанных действий данные в окне Web-броузера будут иметь такой вид, как на рис. 9.14.

РИС. 9.14. Результат представления данных с помощью XML-шаблона и технологии XSL

Резюме

В этой главе представлены базовые сведения о языке XML и его назначении. Здесь демонстрируются способы применения XML на платформе.NET Framework и взаимодействия XML с Visual Basic.NET. В конце главы показан способ конфигурирования Web-сервера IIS и СУБД SQL Server 2000 для представления информации в виде XML-документов, на основе которых можно легко создавать HTML-страницы. Большая часть приведенной здесь информации играет роль введения в главу 10, "ADO.NET и XML".

Вопросы и ответы

Что означает "создание схемы" в контексте XML?

В контексте баз данных "создание схемы" означает создание документа с определениями объектов и сущностей. В контексте XML это понятие может быть расширено и охватывать другие сведения, например определение поля без неопределенных значений (NOT NULL) в таблице базы данных.

Что произойдет, если для названия элемента в XML-документе использовать уже зарезервированное имя HTML-элемента, например title?

Для устранения такой двусмысленности и предназначены пространства имен. Можно создать XML-документ с применением XSLT и использовать в нем уже зарезервированное имя HTML-элемента, например title, для одного из полей таблицы. Именно для этого придется использовать собственное пространство имен.

С помощью строки кода можно теперь использовать префикс b: для любого XML-элемента, даже если его имя совпадает с каким-то уже зарезервированным именем HTML-элемента.

В таком случае строки и будут относиться к совершенно разным <i>сущностям. </i>Единственным строгим условием является предварительное объявление используемого пространства имен, например в самом начале документа.</p> </section> </section> <div id="adfox_164786071391256813"></div> <script> window.yaContextCb.push(() => { Ya.adfoxCode.createAdaptive({ ownerId: 332443, containerId: 'adfox_164786071391256813', params: { p1: 'ctdwx', p2: 'gxmy' } }, ['desktop', 'tablet', 'phone'], { tabletWidth: 830, phoneWidth: 480, isAutoReloads: false }) }) </script> <div class="pagination"> <!-- if($content->bookInfo->litres_url == "" --> <a href="https://fb2.top/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9" class="btn btn-outline-dark btn-block btn-lg mr-1">< Назад</a> <a href="#" class="btn btn-outline-dark btn-block btn-lg mx-1 mt-0" data-toggle="modal" data-target="#modalContents"><i class="fas fa-list-ul"></i></a> <a href="https://fb2.top/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11" class="btn btn-outline-dark btn-block btn-lg mt-0 ml-1">Далее ></a> <!-- // if($content->bookInfo->litres_url == "" --> </div> </div> <div class="d-none d-lg-block col-lg-4 col-xl-4"> <div class="sidebar"> <div class="sidebar-inner"> <div class="sidebar-box tg mt-3 mt-lg-0 "> <div class="sidebar-content"> <div class="sidebar-title"><img src="/img/tg_logo_32.png"> ТЕЛЕГРАМ</div> <p>Канал с обзорами, анонсами новинок и книжными подборками</p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/duosoft_books" onclick="ym(67247512,'reachGoal','5');"><img src="/img/vestnik.knig-32.jpg"> Книжный Вестник</a> <div class="grey-line mb-3"></div> <p>Бот для удобного поиска книг (если не нашлось на сайте)</p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/fb2top_bot" onclick="ym(67247512,'reachGoal','6');"><img src="/img/bot-32.jpg"> Поиск книг</a> <div class="grey-line mb-3"></div> <p>Свежие любовные романы в удобных форматах</p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/newlovebooks" onclick="ym(67247512,'reachGoal','7');"><img src="/img/newlovebooks-32.jpg"> Любовные романы</a> <div class="grey-line mb-3"></div> <p>О психологии, саморазвитии и личностном росте</p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/hotpsychologybooks " onclick="ym(67247512,'reachGoal','21');"><img src="/img/hotpsychologybooks-32.jpg"> Саморазвитие</a> <div class="grey-line mb-3"></div> <p>Детективы и триллеры, все новинки</p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/hotdetectivebooks" onclick="ym(67247512,'reachGoal','14');"><img src="/img/DETECTIVE-32.jpg"> Детективы</a> <div class="grey-line mb-3"></div> <p>Фантастика и фэнтези, все новинки </p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/hotfantasticbooks" onclick="ym(67247512,'reachGoal','15');"><img src="/img/fantasy-32.jpg"> Фантастика</a> <div class="grey-line mb-3"></div> <p>Отборные классические книги </p> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/freeclassicbooks" onclick="ym(67247512,'reachGoal','16');"><img src="/img/classicbooks-32.jpg"> Классика</a> </div> </div> <div class="sidebar-box vk mt-3"> <div class="sidebar-content"> <div class="sidebar-title"><img src="/img/vk.png"> ВКОНТАКТЕ</div> <p>Цитаты, афоризмы, стихи, книжные подборки, обсуждения и многое другое</p> <a class="vk-btn" rel="nofollow" target="_blank" href="https://vk.com/duosoft_books" onclick="ym(67247512,'reachGoal','9');"><img src="/img/vestnik.knig-32.jpg"> Книжный Вестник</a> </div> </div> <div class="sidebar-box insta mt-3"> <div class="sidebar-content"> <div class="sidebar-title"> БИБЛИОТЕКИ</div> <p>Библиотека с любовными романами, которая наверняка придётся по вкусу женской части аудитории</p> <a class="insta-btn" target="_blank" href="https://ladylib.top"><img src="/img/newlovebooks-32.jpg"> Любовные романы</a> <div class="grey-line mb-3"></div> <p>Библиотека с фантастикой и фэнтези, а также смежных жанров</p> <a class="insta-btn" target="_blank" href="https://fictionbooks.top"><img src="/img/fantasy-32.jpg"> Фантастика</a> <div class="grey-line mb-3"></div> <p>Самые популярные книги в формате фб2</p> <a class="insta-btn" target="_blank" href="https://фб2.рф"><img src="/img/classicbooks-32.jpg"> Топ фб2 книги</a> </div> </div> </div> </div> </div> </div> </div> <div class="modal fade" id="modalContents" tabindex="-1" aria-labelledby="modalContentsTitle" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header"> <h3 class="modal-title p-0">Оглавление</h3> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <a rel='nofollow' href='/abuse?bookId=172542'><i class='fas fa-exclamation-circle'></i> Пожаловаться</a><ul class='pl-2'><li class='mg-0 mt-3 mb-3'><a href='https://fb2.top/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542'>К описанию</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#1'>Предисловие</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#2'>Для кого предназначена эта книга</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#3'>Структура книги</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#4'>Используемое программное обеспечение</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#5'>Об авторах</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#6'>О соавторе</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#7'>О рецензентах</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-1#8'>Благодарности</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#9'>ГЛАВА 1 Основы построения баз данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#10'>Что представляет собой база данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#11'>Что такое платформа базы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#12'>Бизнес-ситуации</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#13'>Бизнес-ситуация 1.1: основные сведения о компании Jones Novelties Incorporated</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#14'>Таблицы и поля</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#15'>Проектирование базы данных</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#16'>Бизнес-ситуация 1.2: проектирование таблиц и отношений</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#17'>Манипулирование данными с помощью объектов</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#18'>Типы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#19'>Схема базы данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#20'>Использование инструментов Visual Studio для создания базы данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#21'>Определение индексов и первичного ключа</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#22'>Создание схемы базы данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#23'>Использование программы Microsoft Visio для просмотра и изменения схемы базы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#24'>Отношения</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#25'>Использование ссылочной целостности для поддержания непротиворечивости данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#26'>Проверка ограничений ссылочной целостности с помощью Server Explorer</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#27'>Каскадные обновления и каскадные удаления</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#28'>Нормализация</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#29'>Отношения типа один-к-одному</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#30'>Отношения типа один-ко-многим</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#31'>Отношения типа многие-ко-многим</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#32'>Создание пользовательского интерфейса на основе Windows Forms</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#33'>Подключение к базе данных и работа с записями</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#34'>Создание приложения для просмотра данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#35'>Программный способ связывания данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#36'>Элементы управления, взаимодействующие с данными</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#37'>Обновление записей в приложении просмотра данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#38'>Создание новых записей в форме, связанной с данными</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#39'>Удаление записей из связанной с данными формы</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#40'>Проверка введенных данных в форме, связанной с данными</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#41'>Проверка введенных данных на уровне процессора баз данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#42'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-2#43'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#44'>ГЛАВА 2 Запросы и команды на языке SQL</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#45'>Что такое запрос</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#46'>Тестирование запросов с помощью компонента Server Explorer</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#47'>Отбор записей с помощью предложения SELECT</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#48'>Указание источника записей с помощью предложения FROM</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#49'>Формирование критериев с использованием предложения WHERE</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#50'>Операторы, используемые в предложении WHERE</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#51'>Оператор BETWEEN</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#52'>Оператор LIKE и символы шаблона</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#53'>Оператор IN</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#54'>Сортировка результатов с помощью предложения ORDER BY</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#55'>Сортировка в убывающей последовательности</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#56'>Сортировка по нескольким полям</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#57'>Отображение первых или последних записей диапазона с помощью предложения ТОР</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#58'>Создание запросов TOP PERCENT</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#59'>Объединение связанных таблиц в запросе</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#60'>Выражение объединения в SQL</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#61'>Использование конструктора представлений для создания объединений</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#62'>Использование внешних объединений</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#63'>Выполнение вычислений в запросах</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#64'>Определение псевдонимов с использованием предложения AS</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#65'>Запросы, которые группируют данные и подводят итоги</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#66'>Применение предложения HAVING для группирования данных в запросах</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#67'>Функция SUM</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#68'>Перечень итоговых функций</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#69'>Запросы на объединение</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#70'>Подзапросы</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#71'>Манипулирование данными с помощью SQL</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#72'>Запросы на обновление</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#73'>Запросы на удаление</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#74'>Запрос на добавление записей</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#75'>Запросы на основе команды SELECT INTO</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#76'>Использование языка определения данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#77'>Создание элементов базы данных с помощью предложения CREATE</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#78'>Добавление ограничений в таблицу</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#79'>Назначение внешнего ключа</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#80'>Создание индексов с помощью команды CREATE INDEX</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#81'>Удаление таблиц и индексов с помощью предложения DROP</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#82'>Модификация структуры таблицы с помощью предложения ALTER</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#83'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-3#84'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#85'>ГЛАВА 3 Знакомство с SQL Server 2000</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#86'>Установка и запуск Microsoft SQL Server</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#87'>Требования для инсталляции SQL Server 2000</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#88'>Установка SQL Server 2000</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#89'>Запуск и остановка SQL Server</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#90'>Управление способом запуска SQL Server</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#91'>Основы работы с SQL Server 2000</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#92'>Запуск программы SQL Server Enterprise Manager</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#93'>Создание базы данных с помощью программы SQL Server Enterprise Manager</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#94'>Создание таблиц в базе данных SQL Server</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#95'>Использование программы SQLServer Enterprise Manager для создания таблиц базы данных SQL Server</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#96'>Создание идентификационного поля для уникальной идентификации записей</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#97'>Использование других методов для генерации первичных ключей</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#98'>Создание поля с первичным ключом</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#99'>Использование программы SQL Query Analyzer для доступа к базе данных</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#100'>Просмотр всех объектов базы данных с помощью хранимой процедуры sp_help</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#101'>Использование существующей базы данных</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#102'>Создание команд SQL в программе Query Analyzer</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#103'>Использование представлений для управления доступом к данным</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#104'>Создание представлений с помощью программы SQL Server Enterprise Manager</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#105'>Использование представлений в приложениях</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#106'>Создание представления с помощью программы SQL Query Analyzer</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#107'>Создание и запуск хранимых процедур</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#108'>Запуск хранимых процедур в окне программы SQL Query Analyzer</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#109'>Создание хранимой процедуры с помощью программы SQL Query Analyzer</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#110'>Отображение текста существующих представлений или хранимых процедур</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#111'>Создание триггеров</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#112'>Бизнес-ситуация 3.1: создание триггера для поиска созвучных слов</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#113'>Управление пользователями и средства безопасности с помощью программы SQL Server Enterprise Manager</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#114'>Создание и сопровождение учетных записей пользователей</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#115'>Управление ролями с помощью программы SQL Server Enterprise Manager</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#116'>Тестирование системы безопасности с помощью программы SQL Query Analyzer</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#117'>Применение ограничений безопасности в программе SQL Query Analyzer</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#118'>Определение подключенных пользователей</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#119'>Завершение процесса с помощью команды KILL</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#120'>Удаление объектов базы данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#121'>Бизнес-ситуация 3.2: SQL-сценарий для создания базы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#122'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-4#123'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#124'>ГЛАВА 4 Модель ADO.NET: провайдеры данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#125'>Обзор технологии ADO.NET</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#126'>Мотивация и философия</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#127'>Поддержка распределенных приложений и отсоединенной модели программирования</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#128'>Расширенная поддержка XML</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#129'>Интеграция с .NET Framework</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#130'>Внешний вид объектов ADO.NET</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#131'>ADO.NET И ADO 2.X</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#132'>Место ADO.NET в архитектуре .NET Framework</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#133'>Прикладные интерфейсы</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#134'>Провайдеры данных ADO.NET</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#135'>Провайдер данных SqICIient</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#136'>Провайдер данных Oledb</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#137'>Провайдер данных Odbc</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#138'>Основные объекты</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#139'>Объект Connection</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#140'>Объект Command</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#141'>Применение объекта Command с параметрами и хранимыми процедурами</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#142'>Выполнение команд</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#143'>Метод ExecuteNonQuery</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#144'>Метод ExecuteScalar</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#145'>Метод ExecuteReader</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#146'>Объект DataReader</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#147'>Использование объектов Connection и Command во время создания приложения</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#148'>Другие провайдеры данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#149'>Бизнес-ситуация 4.1: создание процедуры для архивирования старых заказов по годам</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#150'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-5#151'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#152'>ГЛАВА 5 ADO.NET: объект DataSet</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#153'>Компоненты объекта DataSet</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#154'>Ввод данных в объект DataSet</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#155'>Определение схемы объекта DataTable</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#156'>Вставка данных в объект DataTable</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#157'>Обновление данных в объекте DataSet</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#158'>Состояние и версия записи</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#159'>Обработка ошибок ввода данных в записи и поля</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#160'>Доступ к данным с помощью объекта DataTable</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#161'>Поиск, фильтрация и сортировка записей</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#162'>Отношения между таблицами</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#163'>Ограничения</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#164'>Применение объекта DataSet</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#165'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-6#166'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#167'>ГЛАВА 6 ADO.NET: объект DataAdapter</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#168'>Передача данных из источника данных в объект DataSet</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#169'>Обновление источника данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#170'>Указание команд обновления</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#171'>Использование объекта CommandBuilder</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#172'>Явное указание команд обновления</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#173'>Вставка бизнес-логики в команды обновления</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#174'>Использование компонента DataAdapter во время создания приложения</a></li><li class=' mt-1 mg-4'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#175'>Бизнес-ситуация 6.1: комбинация нескольких связанных таблиц</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#176'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-7#177'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#178'>ГЛАВА 7 ADO.NET: дополнительные компоненты</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#179'>Обнаружение конфликтов при параллельном доступе к данным</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#180'>Отображения таблиц и полей</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#181'>Объект DataView</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#182'>Бизнес-ситуация 7.1: просмотр данных из разных источников</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#183'>Строго типизированные наборы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#184'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-8#185'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#186'>ГЛАВА 8 Работа с проектом базы данных среде Visual Studio .NET</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#187'>Создание проекта базы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#188'>Ссылки на базы данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#189'>Сценарии</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#190'>Сценарии создания данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#191'>Сценарии изменения данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#192'>Запуск сценария</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#193'>Командные файлы</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#194'>Запросы</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#195'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-9#196'>Вопросы и ответы</a></li><li class='actual mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#197'>ГЛАВА 9 XML И .NET</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#198'>Обзор XML</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#199'>Семейство технологий XML</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#200'>XML и доступ к данным </a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#201'>Классы XML на платформе .NET</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#202'>Применение модели Document Object Model</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#203'>Применение технологии XPATH</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#204'>Утилита SQLXML</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#205'>Инсталляция и конфигурирование утилиты SQLXML</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#206'>Результаты конфигурирования</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#207'>Применение XML, XSLT и SQLXML для создания отчета</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#208'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-10#209'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#210'>ГЛАВА 10 ADO.NET и XML</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#211'>Основные принципы чтения и записи XML-данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#212'>Чтение XML-данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#213'>Запись XML-данных</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#214'>Формат DiffCram</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#215'>Бизнес-ситуация 10.1: подготовка XML-файлов для бизнес-партнеров</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#216'>Создание объекта XmlReader с помощью объекта Command</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#217'>Объект XmlDataDocument</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#218'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-11#219'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#220'>ГЛАВА 11 Web- формы: приложения на основе ASP.NET для работы с базами данных</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#221'>Обзор технологии ASP.NET</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#222'>HTML- элементы управления и серверные элементы управления</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#223'>Дополнительные преимущества технологии ASP.NET</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#224'>Доступ к базе данных с помощью ASP.NET</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#225'>Включение учетной записи ASP.NET в состав учетных записей SQL Server</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#226'>Применение параметра TRUSTED_CONNECTION</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#227'>Применение элемента управления DataGrid</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#228'>Повышение производительности приложений с помощью хранимых процедур</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#229'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-12#230'>Вопросы и ответы</a></li><li class=' mt-1 mg-1'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#231'>ГЛАВА 12 Web- службы и технологии промежуточного уровня</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#232'>Применение промежуточного уровня для презентационной логики</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#233'>Обработка данных на промежуточном уровне</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#234'>Создание повторно используемых компонентов промежуточного уровня</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#235'>Использование компонента в другом приложении</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#236'>Доступ к объектам с помощью Web-служб</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#237'>Публикация существующего компонента с помощью Web-службы</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#238'>Доступ к Web-службе программными средствами</a></li><li class=' mt-1 mg-3'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#239'>Заключительные замечания</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#240'>Резюме</a></li><li class=' mt-1 mg-2'><a href='/obrabotka-baz-dannyh-na-visual-basic-reg-net-172542/read/part-13#241'>Вопросы и ответы</a></li></ul> </div> </div> </div> </div> <div class="modal fade" id="modalNote" tabindex="-1" role="dialog" aria-labelledby="modalNotesTitle" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered"> <div class="modal-content"> <div class="modal-body"> </div> <div class="modal-footer"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">закрыть</span> </button> </div> </div> </div> </div> <div id="reader_nodes" class="d-none"> </div> <div id="loader-fullscreen"> <div class="d-flex justify-content-center align-items-center"> <div class="spinner-border" role="status"> <span class="sr-only">Загрузка...</span> </div> </div> </div> <input name="bookId" type="hidden" value="172542"> <input name="from_cache" type="hidden" value="0"> </div> <footer id="footer"> <div class="container menu-row"> <div> <a id="btn-zoom-plus" class="pl-1" href="#"><i class="fas fa-search-plus"></i></a> <a id="btn-zoom-minus" class="pl-3" href="#"><i class="fas fa-search-minus"></i></a> <a id="btn-moon" class="pl-3" href="#"><i class="far fa-moon"></i></a> <a id="btn-sun" class="pl-3" href="#"><i class="fas fa-sun "></i></a> </div> <div> </div> <div> <a class="tg btn px-1 d-inline d-lg-none" rel="nofollow" target="_blank" href="https://vk.com/duosoft_books" onclick="ym(67247512,'reachGoal','9');"><img src="/img/vk.png" class="img-fluid" alt="Наш паблик в ВК" title="Наш паблик в ВК"></a> <a class="tg btn px-1 d-inline" rel="nofollow" target="_blank" href="https://t.me/duosoft_books" onclick="ym(67247512,'reachGoal','5');"><img src="/img/tg_logo_32.png" class="img-fluid" alt="Наш Телеграм канал" title="Наш телеграм канал"><span class="d-none d-md-inline"> Наш канал</span></a> </div> </div> </footer> <!-- Styles --> <link rel="stylesheet preload" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" as="style" type="text/css"/> <!-- Scripts --> <script src="/lib/jquery-3.6.0.min.js" defer></script> <script src="/lib/bootstrap-4.6.0/js/bootstrap.min.js" defer></script> <script src="/lib/lib.js?v=2" defer></script> <script src="/js/model/settings.js" defer></script> <script src="/js/reader.js?v=20" defer></script> <!-- Yandex.Metrika counter --> <script type="text/javascript"> (function (m, e, t, r, i, k, a) { m[i] = m[i] || function () { (m[i].a = m[i].a || []).push(arguments) }; m[i].l = 1 * new Date(); k = e.createElement(t), a = e.getElementsByTagName(t)[0], k.async = 1, k.src = r, a.parentNode.insertBefore(k, a) }) (window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym"); ym(67247512, "init", { clickmap: true, trackLinks: true, accurateTrackBounce: true, webvisor: true }); </script> <noscript> <div><img src="https://mc.yandex.ru/watch/67247512" style="position:absolute; left:-9999px;" alt=""/></div> </noscript> <!-- /Yandex.Metrika counter --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-177760544-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-177760544-1'); </script> <div class="modal fade" id="modalSocials" tabindex="-1" aria-hidden="true"> <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable"> <div class="modal-content"> <div class="modal-header"> <h3 class="modal-title p-0">Нравится библиотека?</h3> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <p style="text-align: center">Присоединяйтесь к нашим литературным сообществам!</p> <a class="vk-btn" rel="nofollow" target="_blank" href="https://vk.com/duosoft_books" onclick="ym(67247512,'reachGoal','17');"><img src="/img/vk.png"> ВКОНТАКТЕ</a> <a class="tg-btn" rel="nofollow" target="_blank" href="https://t.me/duosoft_books" onclick="ym(67247512,'reachGoal','19');"><img src="/img/tg_logo_32.png"> В ТЕЛЕГРАМ</a> </div> </div> </div> </div> <div id="adfox_166480280077036586"></div> <script> setTimeout(() => { let shouldReload = true; window.yaContextCb.push(() => { Ya.adfoxCode.createAdaptive({ ownerId: 332443, containerId: 'adfox_166480280077036586', onClose: function (event) { shouldReload = false; }, type: 'floorAd', params: { p1: 'cvxjf', p2: 'heya' } }, ['phone'], { tabletWidth: 830, phoneWidth: 480, isAutoReloads: false }) }); setInterval(function () { if (shouldReload) { window.Ya.adfoxCode.reload('adfox_166480280077036586', {onlyIfWasVisible: true}); } }, 30000); }, 5000) </script> <div id="adfox_16996237345594861"></div> <script> if (screen.width >= 830) { window.yaContextCb.push(() => { Ya.adfoxCode.createAdaptive({ ownerId: 332443, type: 'floorAd', platform: 'desktop', containerId: 'adfox_16996237345594861', params: { p1: 'dabiu', p2: 'iqvg' } }, ['desktop', 'tablet'], { tabletWidth: 830, phoneWidth: 480, isAutoReloads: false }) }) } </script> </body> </html>