Базы данных и XML
Введение в работу с базами данных
Большинство приложений работают с базами данных. Любой программист из крупной компании подтвердит, что роль баз данных в мире вычислительных технологий очень велика. Обладая умением оперировать с базами данных, можно создавать самые разнообразные и действительно полезные приложения.
Возможно, у вас на компьютере уже установлена система управления базами данных, например, Microsoft Access. Лучшая альтернатива – это Microsoft SQL Server Express Edition, с помощью которого вы научитесь работать с базами данных SQL Server, используемыми во многих крупнейших компаниях по всему миру. SQL Server Express включен в пакет установки Visual C# Express, так что, скорее всего, на вашем компьютере он уже установлен.
Для работы с базами данных в библиотеке .NET Framework предусмотрены классы пространства имен System.Data. База данных в корне отличается от таких объектов, как изображения или документы текстовых редакторов, которые часто называют неструктурированными. Информация в базе данных структурирована и обычно хранится в таблицах, а каждая таблица состоит из строк и столбцов.
В программировании строки называют записями, а столбцы задают поля записи. Столбец таблицы определяет тип данных, хранимых в поле записи.
Ниже представлена таблица базы данных, содержащая информацию о планетах. Она имеет следующие столбцы: PlanetName (название планеты), DistanceFromSun (расстояние до Солнца) и Inhabitants (обитатели).
PlanetName | DistanceFromSun (единица измерения – тысяча километров) | Inhabitants |
---|---|---|
Меркурий | 57909 | Меркуриане |
Венера | 108200 | Венериане |
Земля | 149600 | Земляне |
Марс | 227940 | Марсиане |
Юпитер | 778400 | Юпитериане |
Знок | 7208100 | Знокиане |
Сатурн | 1423600 | Сатурниане |
Уран | 2867000 | Ураниане |
Нептун | 4488400 | Нептуниане |
Плутон | 5909600 | Плутониане |
Из таблицы видно, что, например, Венера находится на расстоянии 108 200 тысяч километров от Солнца, а существа, ее населяющие, называются венериане.
Вот еще одна таблица, в которой содержатся сведения о ежегодной численности обитателей разных планет.
Эта совершенно секретная информация, нигде ранее не обнародованная, была получена с инопланетного звездолета, потерпевшего крушение в самой глубине пустыни Гоби. Иметь возможность ознакомиться с ней – большая честь. Очевидно, представители инопланетной цивилизации тоже используют базы данных SQL Server, что и позволило нам привести эти сведения в качестве примера.
Если продолжить разговор о Венере, то, обратите внимание, что в 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.
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, который связывает обе таблицы. Благодаря этой связи можно собрать всю информацию об определенной планете.
Например, можно выбрать из обеих таблиц все строки, касающиеся Венеры:
А затем объединить полученные данные в одну большую таблицу:
SELECT * FROM PLANET INNER JOIN POPULATION ON PLANET.PlanetName=POPULATION.planetName WHERE PlanetName='Венера'