|
Программирование >> Программирование баз данных
Следует отметить, чтю аналогичное ограничение обнаруживается и применительно к другим объектам SQL Server, например, не допускается удаление таблицы, если она является адресатом ссылки внешнего ключа, но в последнем случае обычно не наблюдается столь широкое влияние зависимостей между объектами в базе данных (ведь достаточно применить пользовательский тип данных даже в самом ограниченном объеме, чтобы практически исключить возможность беспрепятственно удалить его опредеяение); поэтому до сих пор автор не считал себя обязанным каждый раз указывать, в каком случае зависимость одного объекта от другого будет препятствовать удалению второго из них (к тому же такие ситуации были более очевидными). Резюме Изучение настоящей главы позволяет убедиться в том, насколько перспективными являются новые средства разработки приложений для СУБД SQL Server, поддерживаемые инфраструктурой .NET. Представленные здесь возможности открывают путь к созданию очень сложных приложений (или даже не столь сложных, но не осуществимых при использовании обычных программных конструкций). С другой стороны, непродуманное использование сборок, на которых основана инфраструктура .NET, для доступа к базе данных SQL Server может привести к нарушению работы всей системы. Поэтому автор обязан предупредить читателя. При использовании сборок соблюдайте предельную осторожность. Тщательно продумывайте всю структуру прр1ло-жения и анализируйте каждое действие, выполняемое с помощью сборки в базе данных, еще более внимательно, чем в обычных условиях применения инфраструктуры .NET. Учитывайте то, какая будет обнаруживаться задержка, если создаваемые процессы придется эксплуатировать в течение более продолжительного времени. Рассмотрите зависимости, которые будут создаваться при выполнении внешних вызовов, и определите, не приведет ли применение внешних процессов к нарушению безопасности. Следует учитывать, что после подключения к внешней системе безопасность приложения полностью зависит от безопасности этой системы. Но сказанное выше не означает, что следует избегать использования сборок .NET исключительно из опасения возможных нарушений в работе пррыожения. Сборки занимают достойное место среди программных средств разработки и предоставляют нам возможности, которые мы не только можем, но и должны использовать (не говоря уже о том, что сами сборки представляют собой просто великолепные конструкции). Как всегда, разработчик обязан лишь определить, что ему действительно требуется, и не усложнять применяемое решение в большей степени, чем диктуется необходимостью. Причем следует учитывать, что решение, которое кажется на первый взгляд слишком сложным, в конечном итоге может оказаться более приемлемым, чем любое другое решение. Например, иногда с помощью хранимых процедур удается достичь того, что остается неосуществимым с помощью сценариев T-SQL. Зачастую разработчики избегают использования сборок, считая, что это приведет к усложнению системы, но в конечном итоге обнаруживают, что им пришлось применить сложную и запутанную хранимую процедуру T-SQL, состоящую из нескольких сотен строк, в то время как было бы достаточно создать краткую и удобную сборку, код которой, включая объявления, состоит из двух десятков строк. Всегда взвешивайте и сопоставляйте все преимущества и недостатки применяемых методов. Глава 15 Курсоры SQL Такие операторы DML языка SQL, как SELECT, UPDATE и DELETE, которые рассматривались в предыдущих главах, предназначены для обработки одновременно целых множеств строк. С другой стороны, в процедурных языках чаще всего применяется построчная обработка данных. В действительности после поступления данных в клиентское приложение в виде результирующего набора, представляющего собой множество строк, обработка данных обычно происходит строка за строкой. Но такую построчную обработку данных можно организовать и с помощью средств языка SQL; для этого используются так называемые курсоры. Применение средств обработки в виде отдельных строк можно обеспечить даже в традиционных инструментальных средствах SQL Server на основе языковой поддержки CLR, при использовании в сценариях языка, отличного от SQL. В настоящей главе рассматриваются следующие темы. Общее определение понятия курсора. Срок существования курсора. Типы курсоров (чувствительность и обеспечение прокрутки). Назначение курсоров. Как будет показано в этой главе, при создании курсоров необходимо учитывать много факторов. Но, по-видимому, важнее всего в первую очередь определить, является ли целесообразным их применение. В частности, необходимо убедиться в том, что в конкретной ситуации курсоры действительно позволят добиться повышения производительности системы. Тем не менее, как будет описано в данной главе, иногда не остается иного выбора, кроме использования курсоров. Общее описание курсоров Курсор- это программная конструкция, которая позволяет организовать построчную обработку набора данных. Необходимость в использовании курсоров возникает не так часто, как принято считать, но действительно встречаются такие ситуации, когда буквально невозможно получить требуемые результаты путем модификации или даже выборки данных с помощью реляционных операций, действие которых распространяется на все множество строк. Выборка строк, входящргх в состав результирующего набора, осуществляется на основании критериев (подобных заданным оператором SELECT), которые являются общими для всех строк набора, а после этого необходимо обеспечить последовательную обработк) строк набора. Результирующий набор, который помещается в курсор, обладает следующими отличительными особенностями по сравнению с множеством строк, полученных с помощью обычного оператора SELECT. Обработка данных с помощью курсора происходит в два этапа: вначале объявляется курсор, а затем выполняются предусмотренные в нем действия. Курсор и связанный с ним результирующий набор имеют одинаковое имя, которое присваивается при объявлении курсора; доступ к указанным объектам осуществляется с указанием имени. Результирующий набор в курсоре после его открытия остается открытым до тех пор, пока не будет закрыт. Применительно к курсорам предусмотрен специальный набор команд, которые используются для перехода в наборе записей от одной строки к другой. Безусловно, в СУБД SQL Server имеется собственная машина для работы с курсорами, но фактически предусмотрено еще несколько разных библиотек объектных модулей, указанных ниже, с помощью которых в SQL Server также могут создаваться курсоры. Собственная клиентская библиотека SQL (используется в ADO.NET). Библиотека OLE DB (используется в ADO). Библиотека ODBC (используется в RDO, DAO, а также, в некоторых случаях, в OLE DB/ADO). Библиотека DB-Lib (используется в VB-SQL). Эти библиотеки, как правило, служат в клиентских приложени5гх для получения доступа к отдельным строкам. В каждой из нргх предусмотрен собственный синтаксис управления набором записей, а также, вообще говоря, управления курсором. Тем не менее все средства поддержки курсоров, предусмотренные в библиотеках объектных модулей, действуют в основном по одинаковому принципу, поэтому достаточно разобраться в том, как функционирует одна объектная модель поддержки курсоров, чтобы получить общее представление о том, как используются все прочие модели. Каждый API-интерфейс доступа к данным (включая ADO.NET, ADO, ODBC, OLE DB и т.д.) возвращает данные в клиентское приложение или компонент курсора; в настоящее время это единственный способ обработки данных с помощью курсора в языках программирования, отличных от SQL. Кроме того, в этом состоит причина существенного различия между курсорами указанного типа и курсорами СУБД SQL Seruer. Курсоры
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |