Опубликован: 14.12.2009 | Уровень: для всех | Доступ: платный
Лекция 6:

Базы данных и XML

< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Аннотация: В лекции рассматривается работа с базами данных на SQL и применение XML в базах данных. Рассматриваются особенности разных СУБД.

Введение в работу с базами данных

Большинство приложений работают с базами данных. Любой программист из крупной компании подтвердит, что роль баз данных в мире вычислительных технологий очень велика. Обладая умением оперировать с базами данных, можно создавать самые разнообразные и действительно полезные приложения.

Возможно, у вас на компьютере уже установлена система управления базами данных, например, Microsoft Access. Лучшая альтернатива – это Microsoft SQL Server Express Edition, с помощью которого вы научитесь работать с базами данных SQL Server, используемыми во многих крупнейших компаниях по всему миру. SQL Server Express включен в пакет установки Visual C# Express, так что, скорее всего, на вашем компьютере он уже установлен.

Для работы с базами данных в библиотеке .NET Framework предусмотрены классы пространства имен System.Data. База данных в корне отличается от таких объектов, как изображения или документы текстовых редакторов, которые часто называют неструктурированными. Информация в базе данных структурирована и обычно хранится в таблицах, а каждая таблица состоит из строк и столбцов.

В программировании строки называют записями, а столбцы задают поля записи. Столбец таблицы определяет тип данных, хранимых в поле записи.

Ниже представлена таблица базы данных, содержащая информацию о планетах. Она имеет следующие столбцы: PlanetName (название планеты), DistanceFromSun (расстояние до Солнца) и Inhabitants (обитатели).

Planet
PlanetName DistanceFromSun (единица измерения – тысяча километров) Inhabitants
Меркурий 57909 Меркуриане
Венера 108200 Венериане
Земля 149600 Земляне
Марс 227940 Марсиане
Юпитер 778400 Юпитериане
Знок 7208100 Знокиане
Сатурн 1423600 Сатурниане
Уран 2867000 Ураниане
Нептун 4488400 Нептуниане
Плутон 5909600 Плутониане

Из таблицы видно, что, например, Венера находится на расстоянии 108 200 тысяч километров от Солнца, а существа, ее населяющие, называются венериане.

Вот еще одна таблица, в которой содержатся сведения о ежегодной численности обитателей разных планет.

Эта совершенно секретная информация, нигде ранее не обнародованная, была получена с инопланетного звездолета, потерпевшего крушение в самой глубине пустыни Гоби. Иметь возможность ознакомиться с ней – большая честь. Очевидно, представители инопланетной цивилизации тоже используют базы данных SQL Server, что и позволило нам привести эти сведения в качестве примера.

Population
PlanetName Year Population
Меркурий 2008 40000
Венера 2008 25
Земля 2008 6000000000
Марс 2008 450000
Юпитер 2008 8326300200
Знок 2008 325000
Сатурн 2008 1000000
Уран 2008 7849345700
Нептун 2008 <NULL>
Плутон 2008 <NULL>
Меркурий 2009 35000
Венера 2009 3
Земля 2009 6500000000
Марс 2009 326800
Юпитер 2009 8451780500
Знок 2009 8700
Сатурн 2009 750000
Уран 2009 8237456000
Нептун 2009 <NULL>
Плутон 2009 <NULL>

Если продолжить разговор о Венере, то, обратите внимание, что в 2008 г. на Венере обитало 25 венериан, а через год, вероятно, в результате извержений вулканов, их осталось всего трое.

Не следует путать базы данных с электронными таблицами. Хотя способ представления данных в электронных таблицах внешне похож на тот, что использовался в приведенных выше примерах, обработка данных происходит в них иначе.

Язык SQL

Существует множество разнообразных систем управления базами данных: Microsoft Access, Oracle, DB2, Microsoft SQL Server, Informix, mySQL, и это далеко не полный список. А нам необходимо обратиться к базе данных из программы на языке C# и "объяснить" ей, что мы ищем.

Проще всего включить в код C# фрагмент на "языке базы данных", с помощью которого выполняется запрос к базе данных на получение нужных столбцов и строк.

(По правде говоря, существует еще и промежуточный уровень – ADO.NET, но сейчас мы не станем заострять на нем внимание.)

Много лет назад специалисты по базам данных договорились об использовании "единого языка баз данных", который понимали бы большинство существующих баз данных. Они назвали его SQL (от англ. Structured Query Language — язык структурированных запросов). Не следует путать язык SQL с системой управления базами данных SQL Server, разработанной корпорацией Microsoft. Язык SQL поддерживают системы управления базами данных (СУБД), выпускаемые самыми разными производителями.


Приступая к разговору о том, как использовать C# при работе с базами данных, сначала познакомимся с основами языка SQL. Ниже приведены примеры операторов на языке SQL и описывается результат их выполнения.

Основными командами SQL являются:

  • SELECT (для выбора некоторых данных);
  • INSERT (для добавления новых данных);
  • UPDATE (для изменения информации, уже существующей в базе данных).

Приведем примеры каждой команды.

Как правило, оператор SELECT записывается следующим образом:

SELECT <имена извлекаемых столбцов>
FROM <имена одной или нескольких таблиц базы данных>
WHERE <условие выбора>

Рассмотрим пример выбора данных оператором SELECT:

SELECT * FROM PLANET

Символ звездочка * означает выбор всех столбцов таблицы. Поэтому данный оператор вернет из базы данных всю таблицу Planet со всеми строками и столбцами.

Рассмотрим оператор

SELECT PlanetName, Inhabitants FROM PLANET

Этот запрос возвращает столбцы PlanetName и Inhabitants со всеми строками из таблицы PLANET.

PlanetName Inhabitants
Меркурий Меркуриане
Венера Венериане
Земля Земляне
Марс Марсиане
Юпитер Юпитериане
Знок Знокиане
Сатурн Сатурниане
Уран Ураниане
Нептун Нептуниане
Плутон Плутониане

Запрос

SELECT PlanetName, Inhabitants FROM PLANET
WHERE PlanetName='Венера'

возвращает столбцы PlanetName и Inhabitants из таблицы PLANET. В результат его выполнения будут включены только те строки, которые содержат значение Венера в столбце PlanetName.

PlanetName Inhabitants
Венера Венериане

Запрос:

SELECT PlanetName, Population FROM POPULATION
WHERE Population<100000

возвращает из таблицы POPULATION строки столбцов PlanetName и Population, для которых значение столбца Population меньше 100000.

PlanetName Population
Меркурий 40000
Венера 25
Нептун <NULL>
Плутон <NULL>
Меркурий 35000
Венера 3
Знок 8700
Нептун <NULL>
Плутон <NULL>

Как правило, оператор INSERT записывается следующим образом:

INSERT INTO <таблица базы данных, к которой добавляются строки>
(<названия столбцов, в которые будут добавляться значения>)
VALUES (<значения, которые будут вставлены в указанные столбцы>)

Пример:

INSERT INTO PLANET (PlanetName, DistanceFromSun, Inhabitants)
VALUES (Флафф, 23500000, 'Флаффиане')

Оператор INSERT добавляет в таблицу PLANET новую строку. Он не возвращает какого-либо результата в программу, но после его выполнения таблица примет вот такой вид:

PlanetName DistanceFromSun Inhabitants
Меркурий 57909 Меркуриане
Венера 108200 Венериане
Земля 149600 Земляне
Марс 227940 Марсиане
Юпитер 778400 Юпитериане
Знок 7208100 Знокиане
Сатурн 1423600 Сатурниане
Уран 2867000 Ураниане
Нептун 4488400 Нептуниане
Плутон 5909600 Плутониане
Флафф 23500000 Флаффиане

Оператор UPDATE записывается следующим образом:

UPDATE <таблица базы данных, в которую вносятся изменения>
SET <названия столбцов, в которые необходимо внести изменения> = <новые значения>
WHERE <условия>

Пример:

UPDATE PLANET SET PlanetName= 'Стафф', Inhabitants='Стаффиане' WHERE PlanetName='Флафф'

Оператор изменяет некоторые значения в той строке, где столбец PlanetName имеет значение "Флафф". Результат выполнения операции программе не возвращается, но таблица примет вот такой вид:

PlanetName DistanceFromSun Inhabitants
Меркурий 57909 Меркуриане
Венера 108200 Венериане
Земля 149600 Земляне
Марс 227940 Марсиане
Юпитер 778400 Юпитериане
Знок 7208100 Знокиане
Сатурн 1423600 Сатурниане
Уран 2867000 Ураниане
Нептун 4488400 Нептуниане
Плутон 5909600 Плутониане
Стафф 23500000 Стаффиане

Связи и объединение таблиц базы данных

Если рассмотреть таблицы внимательно, то можно заметить, что между таблицами PLANET и POPULATION существует связь: и в той и в другой есть столбец с именем PlanetName, который связывает обе таблицы. Благодаря этой связи можно собрать всю информацию об определенной планете.

Например, можно выбрать из обеих таблиц все строки, касающиеся Венеры:

PLANET
PlanetName DistanceFromSun Inhabitants
Венера 108200 Венериане
POPULATION
PlanetName Year Population
Венера 2008 25
Венера 2009 3

А затем объединить полученные данные в одну большую таблицу:

SELECT *
FROM PLANET INNER JOIN POPULATION ON PLANET.PlanetName=POPULATION.planetName
WHERE PlanetName='Венера'
PLANETS_AND_POPULATION
PlanetName DistanceFromSun Inhabitants Year Population
Венера 108200 Венериане 2008 25
Венера 108200 Венериане 2009 3
< Лекция 5 || Лекция 6: 1234 || Лекция 7 >
Алексей Фролов
Алексей Фролов
Кристина Горбунова
Кристина Горбунова
Robert Hirsch
Robert Hirsch
Германия, Worzeldorf
Илья Фурса
Илья Фурса
Россия, Самара