Реферат по предмету "Информатика, программирование"


Разработка баз данных "Articles" средствами платформы Microsoft.NET Framework

Министерствонауки и образования РФ
ГОУ ВПОТульский государственный педагогический университет
им. Л.Н.Толстого
Кафедраинформатики и методики обучения информатике
Курсоваяработа
на тему
РАЗРАБОТКАБАЗ ДАННЫХ «ARTICLES» СРЕДСТВАМИ ПЛАТФОРМЫ MICROSOFT.NET FRAMEWORK
студента 4 курса группы В
Трефилова Д. С.
Тула 2010

Содержание
Введение
Глава 1. Общиесведения о платформе Microsoft .NET Framework
1.1 Новые технологии
2.2 Платформа Microsoft .NET Framework
Глава 2.Приложения с базами данных и методы доступа к СУБД
2.1 Программные интерфейсы доступа кСУБД
2.1.1 Прямой вызов программногоинтерфейса СУБД
2.1.2 Использование программногоинтерфейса ODBC
2.2 Объектные интерфейсы СУБД
2.2.1 Интерфейс OLE DB
2.2.2 Интерфейс ActiveX Data Objects
2.3 Метод доступа ADO .NET
2.3.1 Многоуровневые системы
2.3.2 Рассоединенные системы
2.3.3 Распределенная обработка данныхи XML
2.3.4 Провайдеры данных дляуправляемого кода
Глава 3.Проектирование и разработка базы данных «Статьи»
3.1 Спецификация проекта
3.2 База данных Articles
3.3 Хранимые процедуры
3.4 Соединение с базой данных
3.5 Создание узла дерева
3.5.1 Метод AddNode
3.5.2 Использование хранимых процедур
3.6 Диалоговая форма редактированиядокумента
3.6.1 Построение дерева
Заключение
/>/>Введение
На сегодняшний деньпроектирование баз данных и разработка эффективных приложений с базами данныхявляется одной из самых популярных тем объектно-ориентированногопрограммирования. Ещё более актуальной эта тема стала с появлением новойплатформы .NET Framework, выпущенной компанией Microsoft, которая имеет огромный потенциал врешении вышеуказанных проблем. И это нисколько не удивительно, так какбольшинство деловых и офисных приложений, таких, например, как системы бухгалтерскогоили складского учёта, разного рода системы автоматизации финансового ихозяйственного учёта, а также Web-приложения,рассчитанные для работы в Интернете и интрасетях компаний интегрируются тем илииным способом с базами данных. Хоть .NET Framework и небыла разработана специально для этих целей, но встроенные в неё языкипрограммирования и стандартная библиотека классов, позволяют проектироватьмодели баз данных и разрабатывать клиентские приложения, содержащие базыданных, в полном объёме.
В рамках данной курсовойработы будут изложены основные сведения о платформе .NET Framework, продемонстрированы методы доступа кбазам данных и системам управления базами данных, используя при этом в качествепрограммного инструментария продукт компании Microsoft «Microsoft Visual C# ExpressEdition 2008» и Microsoft SQL Server 2008.
Mною будет разработан собственныйпроект приложения «Статьи», содержащий базу данных и раскрывающий все аспектыразработки базы данных на языке C#,которые будут подробно рассмотрены в третьей главе настоящей курсовой работы./>/>/>

Глава 1. Общие сведения оплатформе Microsoft .NET Framework/>/> 1.1Новые технологии
Новые технологииMicrosoft .NET, ориентированные на разработку автономных и распределенныхприложений Интернета, призваны облегчить создание сложных со временныхприложений, их документирование и внедрение. В рамках Microsoft .NETразработчикам программ предоставляется новый интерфейс программирования(Application Program Interface, API), пригодный для создания обычных настольныхпрограмм Microsoft Windows, системных сервисов Microsoft Windows, а такжеWeb-приложений и Web-сервисов.
В рамках Microsoft .NETдоступны следующие языки программирования:
• MicrosoftC#.
• MicrosoftVisual Basic .NET.
• Managed C++.
• MicrosoftVisual J# .NET.
• JScript.NET.
Кроме того, в рамках Microsoft .NET предоставляется чрезвычайно удобнаяинтегрированная среда разработки приложений Microsoft Visual Studio .NET, а также среда выполнения программ Microsoft .NET Framework.
В составе Microsoft .NETимеется набор сетевых служб и серверов серии.NET Enterprise Server,предназначенных для решения задач аутентификации, для создания систем храненияданных, обработки электронной почты и создания бизнес-систем, а также средствадля программирования и встраиваемых вычислительных систем, например, длямобильных телефонов, игровых приставок и т. п. Планируется выпуск ОС MicrosoftWindows .NET, в полной мере реализующей преимущества технологии Microsoft .NET./>/>1.2Платформа Microsoft .NET Framework
Платформа Microsoft .NETFramework, предназначенная для работы приложений Microsoft .NET, дает большиепреимущества разработчикам программ. В частности, она способна преодолетьбарьеры языковой несовместимости, допуская создание отдельных компонентовсоздаваемой системы на различных языках программирования.
Среди других преимуществMicrosoft .NET Framework заслуживает упоминания наличие обширной библиотекиклассов, существенно облегчающей решение задач, наиболее часто возникающих присоздании автономных программ и Web-приложений.
Эта библиотека,насчитывающая десятки тысяч классов, готовых к употреблению, которые позволят использоватьв своих разработках готовые и отлаженные модули.
Платформа Microsoft .NETFramework обеспечивает возможность использования модулей, разработанныхпрограммистом ранее, а также возможность обращения к новым компонентам изразработанного ранее программного кода. В результате после относительнонебольших переделок старые программы смогут приобрести новую функциональность.
Приложения Microsoft .NETработают в среде Microsoft .NET Framework в рамках системы исполнения программCommon Language Runtime (CLR). Примененная в Microsoft .NET Framework концепцияуправляемого кода обеспечит надежное и безопасное выполнение программ, а такжезначительно уменьшит вероятность допущения ошибок в процессе программирования.Этому же способствует система обработки исключений и система автоматическогоосвобождения неиспользуемой оперативной памяти, называемой системой сборкимусора (garbage collection).
Встроенные в язык С# ирассчитанные на среду Microsoft .NET Framework средства документирования,такие, как атрибуты и операторы комментариев специального вида, позволятсущественно упростить создание конструкторской документации на программный код.Это особенно ценно при разработке больших проектов, когда из-за сложности иобъемности задачи сопровождение разработки превращается в непосильную задачу истановится настоящим кошмаром для менеджера проекта.
В сочетании с мощнымсредством ускоренной разработки приложений Microsoft Visual Studio .NET наборязыков платформы Microsoft .NET послужит отличным подспорьем при созданиипрограмм самого разного типа, как автономных, так и рассчитанных наиспользование в Интернете.
/>/>Глава 2. Приложения с базами данных и методы доступак СУБД/>/> 2.1Программные интерфейсы доступа к СУБД/>/>2.1.1 Прямой вызов программного интерфейса СУБД
Как правило, СУБД любоготипа, предназначенная для работы на платформе Microsoft Windows, предоставляетв распоряжение программиста интерфейс API, с помощью которого программа можетвыполнять все необходимые операции с базами данных. Физически этот интерфейсобычно реализован с помощью библиотек динамической компоновки DLL,экспортирующих функции доступа к СУБД.
В частности, MicrosoftSQL Server предоставляет разработчикам приложений программный интерфейс DBLibrary —естественный интерфейс данной СУБД, реализованный как набор функций.
Следует заметить, чтопрямая работа приложений с программным интерфейсом СУБД может привести кпроблемам при появлении новых версий этих СУБД. Компания Microsoft, например,не рекомендует использовать в новых приложениях упомянутый выше интерфейс DBLibrary, оставленный только для совместимости с разработанными ранееприложениями.
Кроме того, технологияпрямого вызова программного интерфейса СУБД недоступна для разработчиковWeb-приложений, использующих так называемые серверные сценарии JavaScript и VBScript./>/>2.1.2 Использование программного интерфейса ODBC
Программный интерфейсODBC, как и только что упомянутые интерфейсы прямого вызова СУБД также выполненв виде набора функций. Это ограничивает его применение в Web-приложениях.
Однако интерфейс ODBC,созданный специально для доступа к реляционным базам данных, универсален. Этоединый интерфейс, позволяющий приложениям работать с СУБД всех типов, длякоторых имеется так называемый драйвер ODBC.
Используя ODBC,программист может не заботиться о деталях внутреннего устройства и особенностяхестественного интерфейса различных СУБД, т.к. драйвер ODBC полностью скрываетот него эти детали. В результате программы, обращающиеся к базам данных,становятся менее зависимыми от этих баз данных. К сожалению, отличия вреализации драйверов ODBC различных СУБД не всегда позволяют добиться полнойнезависимости программ от типа СУБД./>/>2.2Объектные интерфейсы СУБД
По мере развития ОСMicrosoft Windows и СУБД, на смену программным интерфейсам пришли объектныеинтерфейсы, основанные на использовании модели компонентных объектов ComponentObject Model (COM).
Объекты COM можнопредставить себе как набор интерфейсов, через которые можно получить доступ ксвойствам и методам объекта. Если Вы знакомы с классами, интерфейсами исвойствами языка C#, то эти понятия Вам тоже знакомы. Хотя с появлениемплатформы .NET технология COM становится устаревшей (или, как говорят,унаследованной), до сих пор она интенсивно применяется как в самой ОС MicrosoftWindows, так и в приложениях, создаваемых для этой ОС. />/> 2.2.1 Интерфейс OLE DB
Объектный интерфейс OLEDB представляет собой открытый стандарт, предназначенный для универсальногодоступа приложений к базам данных. В отличие от интерфейса ODBC и RDO,интерфейс OLE DB позволяет приложениям обращаться не только к реляционным БД,но и к нереляционным, таким, например, как серверы почты, базы данных длямэйнфреймов с методами доступа IMS, VSAM и т. д.
Интерфейс OLE DB состоитиз трех компонентов: провайдера (provider), потребителя (consumer) и служебногокомпонента, выполняющего обработку и передачу данных.
В роли потребителя могутвыступать приложения. Задача провайдера OLE DB — реализация интерфейса OLE DB.В составе OLE DB поставляются провайдеры для интерфейсов ODBC, для текстовыхфайлов и некоторые другие. Пользуясь провайдером ODBC, потребители интерфейсаOLE DB могут получить доступ к базам данных через драйвер ODBC./>/>2.2.2 Интерфейс ActiveX Data Objects
Упомянутый выше объектныйинтерфейс OLE DB не реализует механизм автоматизации, в результате чего этотметод не подходит для создания Web-приложений, основанных на серверных сценарияхJavaScript и VB Script.
Объектный интерфейсActiveX Data Objects (ADO) построен на основе интерфейса OLE DB. При этоминтерфейс OLE DB обеспечивает универсальный доступ к данным с помощьюпровайдеров, таких как Microsoft OLE DB Provider для ODBC (MSDASQL) илиMicrosoft OLE DB Provider для SQL Server (SQLOLEDB).
Благодаря тому, чтообъекты ADO реализуют средства автоматизации, интерфейс ADO доступен изприложений, составленных с применением целого спектра инструментальных средств,таких, как серверный сценарии ASP, C++, Visual Basic, Visual Basic forApplications, Java и т. д.
Ключевыми элементамипрограммной модели ADO является набор объектов, с помощью которых выполняетсясоединение с базами данных, выполнение команд с параметрами, получениерезультата выполнения этих команд в виде переменных или наборов записей,обработка событий и ошибок.
Вот типичный сценарийработы приложения с базой данных посредством интерфейса ADO:
· установкасоединения;
· подготовкакоманды и параметров;
· выполнениекоманды;
· обработка результатоввыполнения команды;
· закрытиесоединения;
· обработка ошибок
Прежде чем обращаться кбазе данных, приложение должно установить соединение с сервером базы данных.При этом требуется указать имя источника данных Data Source Name (DSN) илиинформацию об источнике данных, такую как имя драйвера, имя сервера, пароль ит.д.
После установкисоединения приложение должно подготовить объект-команду, записав в его свойствакоманды, необходимые для доступа к данным (например, строки языка SQL).Приложение может передать вместе с командой параметры. Входные параметрыпозволяют передавать информацию в хранимые процедуры СУБД Microsoft SQL Server,а выходные — принимать информацию из хранимой процедуры.
Когда программаинициирует выполнение команды, она получает результат в виде набора записей(Recordset) или через выходные параметры хранимой процедуры (если командазапускает такую процедуру). Приложение может просмотреть все записи изполученного набора, сохранить их в памяти или использовать каким-либо другимспособом. В частности, можно обновить полученный набор записей с цельюобновления источника данных (если это необходимо).
После того как командавыполнена, а результаты ее выполнения обработаны, приложение должно закрытьсоединение. Большое количество незакрытых соединений может привести кчрезмерному расходованию ресурсов сервера СУБД.
В процессе подготовкипараметров команды и ее выполнения могут возникать ошибки. Приложение должнобыть готово их обработать./>/>2.3Метод доступа ADO .NET
Рассмотренные выше методыдоступа с программными и объектными интерфейсами больше всего подходят длясоздания так называемых клиент-серверных приложений. Такие приложения обычнооткрывают соединение с базой данных в начале своей работы, а закрывают — при еезавершении. Если пользователей много, то каждый из них будет во время своейработы держать как минимум одно соединение с сервером СУБД (даже во времяобеденного перерыва, если клиентская программа запускается на целый день). Этоотнимает немало ресурсов сервера и приводит к необходимости приобретениябольшого количества серверных лицензий./>/>2.3.1 Многоуровневые системы
С появлениемWeb-приложений, интегрированных с базами данных, получили развитие такназываемые многоуровневые системы. В этих системах клиент (в роли котороговыступает обычный браузер, такой, например, как Microsoft Internet Explorer)обращается к СУБД не напрямую, а через Web-сервер.
Такое обращениеначинается с того, что бразуер направляет запрос к Web-серверу (например, длявыборки данных из базы данных или обновления базы данных). Далее Web-сервердействует следующим образом:
·  открывает соединение с СУБД;
·  выполняет запрос, обращаясь к базеданных;
·  закрывает соединение с базой данных;
·  отправляет результат запроса вбраузер
Браузер получаетрезультат обработки запроса в виде текстового документа HTML и отображает его всвоем окне.
Так как соединение с базойданных устанавливается только на время обработки запроса, это позволяетэкономить ресурсы сервера СУБД, а также приобретать небольшое количествоклиентских лицензий. Фактически клиентом СУБД в этом случае выступаетWeb-сервер, и только для него нужны клиентские лицензии./>/> 2.3.2 Рассоединенные системы
Метод доступа ADO .NET,доступный приложениям на платформе Microsoft .NET, позволяет создаватьразновидность многоуровневых систем — так называемые рассоединенные(disconnected) системы.
Рассоединенные системыпозволяют получить локально данные, извлеченные из базы данных, выполнить ихлокальную обработку, а затем обновить базу данных на сервере по результатамэтой обработки.
Данные, извлеченные изсервера СУБД методом ADO .NET, сохраняются в объекте класса DataSet. Этотобъект может хранить в себе одновременно несколько таблиц данных, в том числесвязанных между собой (related tables), а также ограничения (constraints). Вчастности, можно переписать в созданный локально объект DataSet содержимое всейбазы данных, расположенной на сервере, если в этом возникнет необходимость.
Вот возможная схемавзаимодействия клиента с сервером в рассоединенной системе, реализованной сиспользованием метода доступа ADO .NET:
· открытиесоединения с сервером СУБД;
· отправка запросак базе данных;
· закрытиесоединения;
· обработка данных,полученных в виде объекта класса DataSet;
· открытиесоединения с сервером СУБД;
· обновление базыданных с использованием содержимого объекта класса DataSet;
· закрытиесоединения/>/>2.3.3 Распределенная обработка данных и XML
Если нужно создатьинформационную систему с распределенной обработкой данных, встает вопросорганизации взаимодействия между серверами и клиентами такой системы. Методдоступа ADO позволяет организовать такую обработку средствами COM, однако этотспособ имеет определенные недостатки. Эти недостатки проявляются в тех случаях,когда нужно объединить узлы системы при помощи каналов Интернета.
Дело в том, чтокорпоративные интрасети, подключенные к Интернету, обычно защищаютсябрандмауэром (firewall), открывающим доступ только для определенных портовTCP/IP и для определенных протоколов передачи данных. Обычно открывается толькопорт 80, предназначенный для работы с Web-серверами посредством протокола HTTP,а также порты протоколов SMTP, POP3 и IMAP, с помощью которых осуществляетсяпередача электронной почты. Эти ограничения обычно несовместимы с системамиудаленной обработки, реализованными с использованием модели COM.
Что же касается ADO .NET,то этот метод доступа допускает представление данных в формате XML. При этомданные могут передаваться с использованием протокола HTTP, что позволяетобъединять информационные системы каналами Интернета, даже если эти системызащищены брандмауэрами./>/>2.3.4 Провайдеры данных для управляемого кода
Программный компонент,называемый провайдером данных (data provider) выступает в качестве моста междуприложением и источником данных. В его задачу входит извлечение данных изисточника, а также обновление источника данных.
Для приложений,содержащих управляемый код и предназначенных для платформы Microsoft .NET,компания Microsoft разработала три провайдера данных. Это SQL Server .NET DataProvider, OLE DB .NET Data Provider и ODBC .NET Data Provider. Первые два из них входят в состав среды исполнения Microsoft.NET Framework, а третий можно загрузить с Web-сайта компании Microsoft поадресу msdn.microsoft.com/downloads.
Если приложение C# должноработать с сервером Microsoft SQL Server версии 7.0 или более новой версии,максимальная производительность будет достигнута при использовании провайдераданных SQL Server .NET Data Provider. К сожалению, специализированныхпровайдеров для прямого доступа из управляемого кода к СУБД других типов покане существует.
Что же касаетсяпровайдера OLE DB .NET Data Provider, то он пригодится Вам для доступа к базамданных Microsoft Access и другим СУБД, для которых реализованы провайдеры OLEDB.
В том случае, когдаединственно возможный способ интеграции приложения и СУБД заключается виспользовании драйвера ODBC, можно воспользоваться провайдером ODBC .NET DataProvider.
/>/>Глава 3. Проектирование и разработка базы данных«Статьи»/>/> 3.1Спецификация проекта
Очень часто возникаетнеобходимость в хранении информации иерархического вида. Реляционные СУБД,такие как Microsoft SQL Server, позволяют хранить информацию в видеиерархического дерева, причем для представления такого дерева нужна всего однатаблица.
Каждая строка таблицы,хранящей структуру дерева, соответствует одному узлу этого дерева. При этом втаблице должно быть, как минимум, два столбца. Первый из них должен содержатьуникальные идентификаторы строки (т.е. идентификаторы узлов), а второй —идентификатор соответствующего родительского узла. Для корневого узла вкачестве идентификатора родительского узла обычно используется нулевое иликакое-либо другое особое значение.
Для демонстрации способахранения дерева в базе данных, а также для того, чтобы на конкретном примереизучить некоторые новые для меня методы работы с базами данных в приложенияхC#, я разработал приложение ArticlesApp.
Приложение ArticlesAppпредставляет собой простейшую информационную систему, предназначенную дляхранения текстовой информации. В базе данных этой системы Articles хранятся статьи, организованныеиерархическим образом.
В левой части этого окнаимеется дерево, созданное с использованием элемента управления TreeView. Окноэтого дерева отображает заголовки статей, а также так называемые веса сортировкизаголовков, указанные в круглых скобках. Эти веса понадобятся мне далее впрограмме для корректного отображения иерархичности данных.
Замечу, что сразу послезапуска приложения, когда в базе данных нет ни одной записи, дерево заголовковне содержит ни одного элемента. Если щелкнуть окно дерева правой клавишей мыши,на экране появится контекстное меню со строками Добавить статью, Удалить статьюи Правка статьи. При нажатии на эти кнопки вызываются методы, позволяющиеуправлять содержимым базы данных.
Выбор строки Добавитьстатью приведет к тому, что на экране появится диалоговое окно Form2, специально созданное для этойцели. Оно содержит поле типа textboxдля хранения заголовка статьи, поле типа RichTextBox для хранения самого текста статьи. Также имеется поле типа numericUpDown для хранения веса сортировки и 2кнопки Сохранить и Отменить. Таким образом,при помощи этого окна можно добавить в базу данных новую статью, определив длянее заголовок, тело и вес сортировки.
Если в дереве нет ниодного элемента, то при первом использовании строки Добавить статьюконтекстного меню в дерево будет добавлен корневой элемент. Для того чтобыдобавить в дерево дочерний элемент, нужно вначале выделить левой клавишей мышизаголовок родительского элемента, а потом, щелкнув этот заголовок правойклавишей мыши, выбрать из контекстного меню строку Добавить статью. Редактированиелюбого элемента выполняется аналогично. Для выполнения этой операции нужновыделить элемент, а затем, щелкнув его правой клавишей мыши, выбрать из контекстногоменю строку Правка статьи. С помощью строки Удалить статью можно удалитьэлемент дерева. Замечу, что программа удаляет только элементы, не имеющиедочерних элементов. Попытки удалить элемент с дочерними элементами моёприложение игнорирует./>/>3.2База данных Articles
Для создания приложения ArticlesApp мною была создана база данных Articles на Microsoft SQL Server 2008. Она содержит 2 таблицы и 3 хранимые процедуры.
Таблица Treeпредназначена для хранения структуры дерева статей. В ней создано четырестолбца с именами id, parent_id, title и weight. Столбец id является первичнымключом. Данную таблицу я создал с помощью sql-запроса следующего содержания:
CREATE TABLE [dbo].[Tree](
[id] [int]IDENTITY (1, 1) NOT NULL ,
[parent_id][int] NOT NULL ,
[title][varchar] (50) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[weight] [int]NOT NULL
) ON[PRIMARY].
Здесь столбец id хранит идентификаторы узлов дерева,а столбец parent_id — идентификаторы родительских узлов. Таким образом, вместе скаждым узлом хранится идентификатор его родительского узла.
Поля title и weight предназначены, соответственно, для хранения заголовкастатьи и веса сортировки, назначенного этой статье. Вес сортировки необходимдля визуализации заголовков статей в виде дерева. Чем выше вес сортировки, темниже располагается данная статья в дереве заголовков.
Можно было бы хранитьтексты документов в самой таблице Tree, однако это привело бы к неэффективному расходованию памяти.
В самом деле, приотображении дерева мне фактически нужно загрузить в память все содержимоетаблицы Tree. Однако в каждый момент времени пользователь просматривает илиредактирует только одну статью, поэтому нет никакой необходимости загружать этиданные в память вместе со структурой дерева.
Для хранения текстовстатей я создал отдельную таблицу Documents, содержащую столбцы id, document иtree_id. Первый из этих столбцов является ключевым. Ниже представлен sql-запрос, с помощью которого я создалтаблицу Documents:
CREATE TABLE[dbo].[Documents] (
[id] [int]IDENTITY (1, 1) NOT NULL ,
[document][varchar] (5000) COLLATE Cyrillic_General_CI_AS NOT NULL ,
[tree_id][int] NOT NULL
) ON [PRIMARY]
В столбце id таблицы Documents хранятся уникальные идентификаторыстатей, которые напрямую не используются в моём приложении.
Столбец tree_id хранит идентификатор узла дерева, соответствующего даннойстатье. Этот столбец является внешним ключом для таблицы Tree.
И, наконец, столбец document хранит текст самой статьи.
/> 3.3 Хранимые процедуры
Часть работы с базойданных моё приложение будет выполнять при помощи команд SQL, оформленных в видеобъектов класса SqlCommand. Однако на примере этого приложения я покажу какможно работать с хранимыми процедурами сервера Microsoft SQL Server.
Хранимая процедураsp_InsertDocument предназначена для добавления нового документа в таблицуDocuments:
CREATE PROCEDURE [dbo].[sp_InsertDocument]
@tree_id AS INT,
@document AS VARCHAR(2000)
AS
INSERT INTO dbo.Documents(tree_id, document) VALUES (@tree_id,@document);
RETURN @@identity
Этой процедуре необходимопередать два параметра @tree_id и @document. Первый из этих параметровпредназначен для передачи идентификатора узла, в который добавляется статья, авторой — для передачи текста этой статьи. Процедура возвращает идентификатордобавленной строки @@identity.
Хранимая процедура sp_InsertNode вставляет новую строку в таблицу Tree, возвращая идентификатор новойстроки:
CREATE PROCEDURE [dbo].[sp_InsertNode]
@parent_id AS INT,
@title AS VARCHAR(50),
@weight AS INT
AS
INSERT INTO dbo.Tree(parent_id, title, weight) VALUES (@parent_id,@title, @weight);
RETURN @@identity
Этой процедуре нужнопередать через входные параметры идентификатор родительского узла @parent_id (равный 0 для корневого узла), заголовок статьи @title и вес сортировки @weight.
При помощи хранимойпроцедуры sp_UpdateDocument моё приложение обновляет текстыстатей, хранящиеся в таблице Documents:.
ALTER PROCEDURE [dbo].[sp_UpdateDocument]
@tree_id as int,
@document AS VARCHAR(2000)
AS
UPDATEdbo.Documents SET document = @document WHERE (tree_id = @tree_id)
В качестве параметра этойхранимой процедуре необходимо передать идентификатор узла @tree_id обновляемой статьи, а также текст статьи @document.
/> 3.4 Соединение с базой данных
Прежде всего, я обеспечилприложение возможностью соединения с базой данных Articles. С этой целью мноюбыл добавлен программный компонент SqlConnection. Идентификатор этогокомпонента будет храниться в поле sqlConnection1 класса Form1.
Чтобы приложение моглокорректным образом соединиться с базой данных Articles свойство ConnectionString объекта SqlConnection1 должно быть отредактированоследующим образом:
DataSource=.\SQLEXPRESS;AttachDbFilename=D:\Work\ArticlesApp\ArticlesApp\Articles.mdf;IntegratedSecurity=True;Connect Timeout=30;User Instance=True
Для того чтобы приложениемогло загружать содержимое таблицы Tree базы данных Articles, хранящейструктуру дерева статей, я добавил в него адаптер SqlDataAdapter, использующийсоединение SqlConnection1. Таким образом ссылка на адаптерданных будет хранится в поле SqlDataAdapter1.
После добавления адаптеранеобходимо создать набор данных DataSet.Выбрав на панели инструментов одноимённый компонент, я создал набор данных DataSet1, содержащий обе таблицы базы данныхArticles.
/> 3.5 Создание узла дерева
Создание дереваначинается с того, что пользователь запускает приложение, щелкает правойклавишей мыши пустое окно дерева и выбирает из контекстного меню строкуДобавить статью. В результате на экране появляется диалоговое окно, показанноена рисунке ниже, где пользователь может ввести информацию для узла дерева:
/>

Реализация процессадобавления статьи состоит в написании обработчика события для кнопки Добавить статьюконтекстного меню contextMenuStrip1.Ниже приведён обработчик для этого события:
privatevoid добавитьToolStripMenuItem_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null)
{
int id = (int)treeView1.SelectedNode.Tag;
AddNode(id);
UpdateTree();
}
else
{
// Пустой список
if (treeView1.Nodes.Count == 0)
{
AddNode(0);
UpdateTree();
}
}
}
При самом первом запускеприложения и пустой базе данных в дереве treeView1 не выделено ни одногоэлемента, т.к. их там попросту нет. Соответственно, количество узлов дереваtreeView1.Nodes.Count равно нулю. В этом случае моё приложение вызывает дваметода:
AddNode(0);
UpdateTree();/>/>3.5.1 Метод AddNode
Метод AddNode, определенныйв моём приложении, создает узел дерева. В качестве единственного параметраэтому методу нужно передать идентификатор родительского узла. Так как в первыйраз пользователь создает корневой узел, то передаем методу AddNode нулевоезначение.
Что же касается методаUpdateTree, то он тоже определен в моём приложении. Его задачей являетсянаполнение окна дерева treeView1 содержимым таблицы Tree базы данных Articles.Я вызываю этот метод всякий раз после внесения изменений в структуру дерева(т.е. после добавления или удаления узлов дерева).
Для того чтобы содержимоедерева отображалось сразу после запуска приложения, я добавил вызов методаUpdateTree в конструктор класса Form1:
publicForm1()
{
InitializeComponent();
UpdateTree();
}
В том случае, если вдереве есть узлы, и пользователь выделил какой-либо узел левой клавишей мышиили при помощи клавиатуры, наш обработчик событий добавитьToolStripMenuItem_Click выполняет следующие действия:
if (treeView1.SelectedNode != null)
{
int id = (int)treeView1.SelectedNode.Tag;
AddNode(id);
UpdateTree();
}
Вначале он извлекает изсвойства treeView1.SelectedNode.Tag идентификатор строки таблицы Tree,соответствующий выделенному узлу. Этот идентификатор записывается в данноесвойство методом UpdateTree в процессе построения дерева.
Замечу, что данныйидентификатор обозначает узел, являющийся родительским по отношению ксоздаваемому узлу. Обработчик событий добавитьToolStripMenuItem_Click передает этот идентификатор методу AddNode, а затемперерисовывает обновленное дерево методом UpdateTree:

AddNode(id);
UpdateTree();
Рассмотримреализацию метода AddNode, служащегодля добавления нового узла в дереве заголовков статей и добавления всехнеобходимых записей в базу данных Articles:
public void AddNode(int id)
{
Form2 dialog = new Form2();
if (DialogResult.Yes == dialog.ShowDialog())
{
sqlConnection1.Open();
try
{
SqlCommand cmd = newSqlCommand(«sp_InsertNode»,sqlConnection1);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param =cmd.Parameters.Add(«RETURN_VALUE»,SqlDbType.Int);
param.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("@parent_id", SqlDbType.Int).Value = id;
cmd.Parameters.Add("@title", SqlDbType.VarChar).Value=dialog.Title;
cmd.Parameters.Add("@weight", SqlDbType.Int).Value=dialog.Weight;
cmd.ExecuteNonQuery();
int tree_id = (int)cmd.Parameters[«RETURN_VALUE»].Value;
cmd = new SqlCommand(«sp_InsertDocument», sqlConnection1);
cmd.CommandType = CommandType.StoredProcedure;
param = cmd.Parameters.Add(«RETURN_VALUE», SqlDbType.Int);
param.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("@tree_id", SqlDbType.Int).Value = tree_id;
cmd.Parameters.Add("@document", SqlDbType.Text).Value=dialog.Document;
cmd.ExecuteNonQuery();
int document_id = (int)cmd.Parameters[«RETURN_VALUE»].Value;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, «Ошибка»);
}
sqlConnection1.Close();
}
}
Всамом начале работы метод AddNodeотображает диалоговое окно для добавления новой статьи. Это диалоговое окнопредставляет собой класс Form2,добавленный непосредственно в проект приложения ArticlesApp.
Еслипользователь завершил работу с данным диалоговым окном нажатием кнопкиСохранить, то метод AddNode извлекаетданные, введённые пользователем и добавляет их в таблицы базы данных Articles:
Form2 dialog = new Form2();
if (DialogResult.Yes == dialog.ShowDialog())
{
...
Длядобавления данных, прежде всего, открывается соединение с базой данных: sqlConnection1.Open();
Вседальнейшие операции выполняются в теле оператора try-catch,что позволяет перехватывать ошибки и отображать текст сообщений об ошибках наэкране:
try
{
...
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, «Ошибка»);}
Послеобновления содержимого базы данных метод AddNode закрывает соединение с базой данных SqlConnection1.Close();./>/> 3.5.2 Использование хранимых процедур
Прежде всего, мояпрограмма вызывает хранимую процедуру sp_InsertNode, предназначенную для добавленияновой строки в таблицу Tree,хранящую структуру дерева. Напомню, что этой процедуре нужно передать черезвходные параметры идентификатор родительского узла @parent_id,заголовок статьи @title и вессортировки @weight.
Вызов хранимой процедурыначинается с создания объекта класса SqlCommand:
SqlCommand cmd = newSqlCommand(«sp_InsertNode»,sqlConnection1);
cmd.CommandType = CommandType.StoredProcedure;
Далее программа должна задатьтип командыв свойстве CommandType в виде константы CommandType.StoredProcedure: cmd.CommandType.
Это означает, что командасодержит не строку SQL, а имяхранимой процедуры.
На следующем этапенеобходимо добавить параметры хранимой процедуры. Наша хранимая процедураsp_InsertNode имеет три входных и один выходной параметр.
Через выходной параметрсо специальным именем RETURN_VALUE хранимая процедура возвращает идентификатордобавленной строки:
SqlParameterparam = cmd.Parameters.Add(«RETURN_VALUE»,SqlDbType.Int);
В качестве первогопараметра методу Add передается имя параметра хранимой процедуры, а в качествевторого — тип данных, соответствующих этому параметру.
Чтобы указать, что этотпараметр является выходным, я записываю константуParameterDirection.ReturnValue в свойство параметра с именем Direction:
param.Direction =ParameterDirection.ReturnValue;
Если этого не сделать, топо умолчанию параметр будет входным.
Вот как я указываювходные параметры для хранимой процедуры sp_InsertNode:
cmd.Parameters.Add("@parent_id", SqlDbType.Int).Value = id;
cmd.Parameters.Add("@title", SqlDbType.VarChar).Value=dialog.Title;
cmd.Parameters.Add("@weight", SqlDbType.Int).Value=dialog.Weight;
Следуетотметить, что тип числовых данных указан как SqlDbType.Int, а тип строчных данных — как SqlDbT ype.VarChar.
Параметру хранимойпроцедуры @parent_id я присваиваю значение идентификатора родительского узла,который передается при вызове методу AddNode. Что же касается параметров @titleи @weight, то для их инициализации я извлекаю значения из свойств Title иWeight, определенных мною в классе Form2 диалогового окна ввода данных узла.
Для запуска хранимой процедурына выполнение вызывается метод ExecuteNonQuery:
cmd.ExecuteNonQuery();
Если у хранимой процедурыимеются параметры (как в моём случае), то их необходимо подготовить. Иначе привыполнении метода ExecuteNonQuery возникнет необработанное исключение.
Послетого как хранимая процедура завершит свою работу, программа может получитьзначение ее выходных параметров при помощи свойства Value.
Воткак я извлекаю значение, возвращаемое хранимой процедурой sp_InsertNode:
int tree_id = (int)cmd.Parameters[«RETURN_VALUE»].Value;
Напомню,что моя хранимая процедура возвращает идентификатор узла, добавленного втаблицу Tree. Этот идентификатор понадобится нам в дальнейшем для инициализацииячейки внешнего ключа таблицы Documents, ссылающейся на таблицу Tree.
Длядобавления текста документа, извлеченного из свойства dialog.Documentдиалогового окна класса Form2 я вызываю хранимую процедуру sp_InsertDocument:
cmd = new SqlCommand(«sp_InsertDocument», sqlConnection1);
cmd.CommandType = CommandType.StoredProcedure;
param = cmd.Parameters.Add(«RETURN_VALUE», SqlDbType.Int);
param.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add("@tree_id", SqlDbType.Int).Value = tree_id;
cmd.Parameters.Add("@document", SqlDbType.Text).Value=dialog.Document;
cmd.ExecuteNonQuery();
int document_id = (int)cmd.Parameters[«RETURN_VALUE»].Value;
Выходнойпараметр получает возможность получить идентификатор новой строки в таблицеDocuments. Я извлекаю его только для примера, но в приложении не использую. Чтоже касается входных параметров, то хранимой процедуре sp_InsertDocumentпередается идентификатор узла @tree_id обновляемой статьи, а также текст статьи@document./>/>3.6Диалоговая форма редактирования документа
Для того чтобы программамогла инициализировать поля формы, а также получать значения, введенные в нейпользователем, необходимо создать в классе Form2 свойства Title, Weight иDocument с помощью полей set и get. Ниже приведены исходные коды дляэтих свойств:
publicstring Title
{
get
{
return textBox1.Text;
}
set
{
textBox1.Text = value;
}
}
public int Weight
{
get
{
return (int)numericUpDown1.Value;
}
set
{
numericUpDown1.Value = value;
}
}
public string Document
{
get
{
return richTextBox1.Text;
}
set
{
richTextBox1.Text= value;
}
}/>/>3.6.1 Построение дерева
Дляпостроения дерева заголовков статей в окне элемента управления TreeView в нашемприложении определен метод UpdateTree, на который я уже ссылались ранее, атакже метод CreateNodes.
МетодUpdateTree считывает структуру дерева из базы данных Articles и отображает ее вокне элемента управления treeView1 класса TreeView.
public void UpdateTree()
{
dataSet11.Clear();
sqlDataAdapter1.Fill(dataSet11);
treeView1.Nodes.Clear();
CreateNodes(0, (TreeNode)null);
}
Получив управление, метод UpdateTree очищает набор данных dataSet11, а затем наполняет его из таблицы Tree базы данных Aticles, пользуясь для этого адаптером sqlDataAdapter1 и методом Fill. Заполнениедерева treeView1 содержимым набора данных dataSet11 осуществляется методомCreateNodes.
public void CreateNodes(int iParent, TreeNode pNode)
{
DataView dvwData = new DataView(dataSet11.Tree);
dvwData.RowFilter = "[parent_id] = " + iParent;
foreach (DataRowView Row in dvwData)
{
int id = Int32.Parse(Row[«id»].ToString());
if (pNode == null)
{
TreeNode zNode = treeView1.Nodes.Add(Row[«title»].ToString() +
" (" + Row[«weight»].ToString() + ")");
zNode.Tag = id;
CreateNodes(id, zNode);
}
else
{
if (id == iParent)
return;
TreeNode zNode = pNode.Nodes.Add(Row[«title»].ToString() +
" (" + Row[«weight»].ToString() + ")");
zNode.Tag = id;
CreateNodes(id, zNode);
}
}
}
Метод CreateNodes имеет два параметра.
Черезпервый параметр методу передается идентификатор узла, родительского поотношению к добавляемому узлу. Если создается корневой узел, то значение этогопараметра равно нулю.
Второйпараметр используется для передачи ссылки на родительский узел дереваtreeView1, который является объектом класса TreeNode. При создании корневогоузла этот параметр должен иметь значение null.
Преждевсего, он создает представление (view) таблицы dvwData, хранящейся в набореданных dataSet11. Это представление включает в себя подмножество строк таблицы,столбец parent_id которых содержит идентификатор родительского узла,переданного методу CreateNodes в качестве первого параметра. Иными словами,здесь происходит отбор дочерних узлов заданного родительского узла.
/>/>Заключение
база данныхприложение microsoft
В настоящей курсовойработе были изложены сведения о платформе Microsoft.NET Framework, рассказано о способах и методахдоступа к базам данных и системам управления базами данных, а также наконкретном примере продемонстрирована работа по проектированию ипрограммированию баз данных средствами выше упомянутой платформы. Мною былоспроектировано приложение «Articles», исходный код которого прилагается к курсовой работе.
В ходе выполнения даннойкурсовой я узнал много новых аспектов, касающихся программирования баз данныхна языке C#, а также познакомился со способамиработы Microsoft SQL Server 2008. Считаю поставленную задачу полностьювыполненной и реализованной.
Размещено на www.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.