Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание базы данных в Visual Studio

Поиск

Лабораторная работа № 19

 

Работа с базами данных в С#

 

Время выполнения работы – 4 часа

 

 

 

 

Цель работы

Ознакомление с основой разработки Windows-приложений на языке C# для работы с базами данных.

Техническое обеспечение

2.1 Персональная ЭВМ IBM Pentium IV и более поздних моделей c оперативной памятью не менее 512 Мбайт.

2.2 Клавиатура.

2.3 Дисплей.

2.4 Манипулятор типа “мышь”.

Программное обеспечение

3.1 Операционная система Windows XP SP 3 более поздние версии Windows.

3.2 Система программирования Microsoft Visual Studio 2005 и более поздние версии.

Постановка задачи

Разработать консольное и Windows-приложения для однотабличной базы данных для СУБД Microsoft SQL Server, реализованной согласно варианта задания, которые приведены в разделе 6 настоящих методических указаний.

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

 

5 Базы данных в C#

Большинство приложений так или иначе обрабатывает данные. Эти данные час­то хранятся в реляционной базе данных, например, SQL Server, Oracle или MySQL (существует и множество других).

В этой главе обсуждаются основы работы с базами данных на платформе.NET. Если у вас на компьютере нет никакой базы данных, я рекомендую установить SQL Server Express Edition или MySql Community Edition, дистрибутивы для которых вы легко найдете в Интернете. Обе базы данных имеют компоненты, позволяющие создавать и редактировать базы данных непосредственно из Visual Studio.

Во всех примерах методических указаний используется база данных TestDB, содержащая единственную таблицу под названием Books. В первом разделе обсуждается созда­ние базы данных на сервере SQL Server.

 

Создание базы данных в Visual Studio

Задача. Вы хотите создать базу данных из среды Visual Studio.

Решение. Вначале установите сервер базы данных, например, SQL Server (для целей этих методических указаний отлично подойдет Express Edition). В то время как SQL Server ав­томатически интегрируется с Visual Studio, не исключено, что вам придется загру­зить дополнительные компоненты, чтобы базы данных от сторонних производите­лей могли работать в среде Visual Studio. В этом разделе предполагается, что вы используете SQL Server.

1) Откройте Server Explorer (в меню View (Вид) или комбинацией клавиш <Ctrl>+<W>, <L>).

2) Сделайте щелчок правой кнопкой мыши по Data Connections (Соединения с данными) и выберите Create New SQL Server Database (Создать базу данных в SQL Server).

3) Выберите экземпляр сервера в раскрывающемся списке и укажите метод аутен­тификации (в соответствии с настройками сервера).

4) Введите имя, например, TestDB и щелкните по кнопке ОК.

5) Разверните окно созданной базы данных.

6) Сделайте щелчок правой кнопкой мыши по Tables и выберите пункт Add New Table (Добавить новую таблицу).

7) Сконфигурируйте таблицу примерно так, как показано на рис. 17.1.

8) Закройте окно и дайте таблице имя Books.

9) Чтобы заполнить таблицу данными, сделайте на ней щелчок правой кнопкой мыши и выберите Show Table Data (Показать данные таблицы). Значения, ко­торые я добавил в свою таблицу, показаны на рис. 17.2.

Рисунок 17.1 – Конфигурация таблицы в тестовой базе данных

 

Рисунок 17.2 – Данные в таблице

 

Соединение с базой и чтение данных

Задача. Вам нужно установить соединение с базой данных и выдать простой за­прос к ней.

Решение. Работа с большинством баз данных сводится к следующим шагам:

1) Создать соединение с помощью строки соединения.

2) Выдать команду в соответствии с синтаксисом SQL.

3) Выполнить команду через соединение и, возможно, получить данные.

В следующих разделах вы увидите конкретные примеры того, как это делается. Чтобы код примеров в этой главе был работоспособным, в большинстве случаев требуется пространство имен System.Data.SqlClient, даже если в коде отсутству­ют прямые ссылки на него.

Реализацию данной задачи см. проект ConnectToSqlServer.

Соединение с SQL Server

Среда.NET поставляется с классом, обеспечивающим соединение с SQL Server, поэтому мы начнем с этого сервера базы данных.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data.SqlClient;

 

namespace ConnectToSqlServer

{

class Program

{

static void Main(string[] args)

{

try

{

string connectionString = GetConnectionString();

using (SqlConnection conn =

new SqlConnection(connectionString))

{

conn.Open();

//He забудьте передать команде объект-соединение

using (SqlCommand cmd = new SqlCommand(

"SELECT * FROM Books", conn)

using (SqlDataReader reader = cmd.ExecuteReader())

{

// Класс SqlDataReader читает ряды и базы данных

// по одному, по мере того, как вы их запрашиваете

while (reader.Read())

{

Console.WriteLine("{0}\t{1}\t{2}",

reader.GetInt32(0),

reader.GetString(1),

reader.GetInt32(2));

}

}

}

}

catch (SqlException ex)

{

Console.Write(ex);

}

Console.ReadKey();

}

// Хранить строки соединения в исходном коде не нужно.

// но здесь это сделано в иллюстративных целях

static string GetConnectionString()

{

// Укажите источник данных, соответствующий

// локальной копии SQL Server на вашем компьютере

return @"Data source=NICOL_SRV\SQLEXPRESS;

Initial Catalog=TestDB; Integrated Security=SSPI";

}

}

}

 

Этот код выводит следующие результаты:

Les Miserables 1862

Notre-Dame de Paris 1831

Le Rhin 1842

Соединение с MySQL

Фирма Sun (обладатель прав на MySQL в то время, когда писались эти строки) поставляет.NET-классы для работы с базами данных MySQL. Вы можете выбрать любой из двух вариантов установки:

- воспользоваться программой-установщиком, которая поместит библиотеку MySql.Data.dll в глобальный кэш сборки (GAC, Global Assembly Cache), чтобы приложения MySql могли обращаться к ней;

- поместить MySql.Data.dll в свой проект и обращаться к ней непосредственно из файловой системы.

В коде, сопровождающем эту главу, выбрана вторая возможность. Хотя это дело вкуса, я предпочитаю минимизировать внешние зависимости проекта. После до­бавления ссылки на компонент код оказывается практически идентичным коду, работающему с SQL Server.

Реализацию данной задачи см. проект ConnectToMySQL.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using MySql.Data.MySqlClient;

 

namespace ConnectToMySQL

{

class Program

{

static void Main(string[] args)

{

try

{

string connectionString = GetConnectionString();

// Практически код тот же самый,

// но везде появился префикс “My”

using (MySqlConnection conn =

new MySqlConnection(connectionString))

{

conn.Open();

using (MySqlCommand cmd = new MySqlCommand(

"SELECT * FROM Books", conn))

using (MySqlDataReader reader = cmd.ExecuteReader())

{

while (reader.Read())

{

Console.WriteLine("{0}\t{1}\t{2}",

reader.GetInt32(0),

reader.GetString(1),

reader.GetInt32(2));

}

}

}

}

catch (MySqlException ex)

{

Console.Write(ex);

}

Console.ReadKey();

}

// Хранить строки соединения в исходном коде не надо,

// но здесь это сделано в иллюстративных целях

static string GetConnectionString()

{

return @"Data source=localhost;Initial Catalog=TestDB;

user=ben;password=password;";

}

}

}

 

Примечания

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

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

Примечания

Большинство SQL-объектов является оболочками для внешних ресурсов, и это объ­ясняет активное использование операторов using в коде программы.

Для выполнения кода обязательно используйте объекты класса SqlCommandс пара­метрами. Это защитит вашу базу данных от атак вида "SQL-инъекция". Если вы буде­те выполнять обычные SQL-операторы, особенно с пользовательскими данными внутри них, это послужит сигналом для злоумышленников, что базу данных можно ук­расть или разрушить.

Действительно ли вам необходимо удалить данные? Эта задача может оказаться до­вольно трудоемкой, если у вас много таблиц, ссылающихся друг на друга. Вы не по­верите, но во многих случаях гораздо проще оставлять данные в таблице и сопровож­дать поле "Удалено", которое будет служить идентификатором, что запись содержит неактивные данные.

Тем не менее, удалять данные приходится. Например, если принят закон, требующий удаления определенных данных по истечении определенного интервала времени.

Транзакции

Задача. Вы хотите использовать транзакции, чтобы несколько операций обраба­тывались как атомарная единица, то есть либо все они выполняются успешно, либо все заканчиваются неудачей.

Решение. Вы можете создать транзакцию на основе объекта-соединения. После этого нужно включать ее в каждую выполняемую команду.

Реализацию данной задачи см. проект UseTransactions.

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data.SqlClient;

 

namespace UseTransactions

{

class Program

{

static void Main(string[] args)

{

try

{

string connectionString = GetConnectionString();

using (SqlConnection conn =

new SqlConnection(connectionString))

{

conn.Open();

Console.WriteLine("Before attempted inserts: ");

using (SqlCommand cmd = new SqlCommand(

"SELECT * FROM Books", conn))

using (SqlDataReader reader = cmd.ExecuteReader())

{

while (reader.Read())

{

Console.WriteLine("{0}\t{1}\t{2}",

reader.GetInt32(0),

reader.GetString(1),

reader.GetInt32(2));

}

}

using (SqlTransaction transaction = conn.BeginTransaction())

{

try

{

using (SqlCommand cmd = new SqlCommand(

"INSERT INTO Books (Title, PublishYear)

VALUES ('Test', 2010)", conn, transaction))

{

cmd.ExecuteNonQuery(); // “Это должно работать

}

using (SqlCommand cmd = new SqlCommand(

"INSERT INTO Books (Title, PublishYear)

VALUES ('Test', 'Oops')", conn, transaction))

{

cmd.ExecuteNonQuery(); // Это НЕ должно работать

}

 

transaction.Commit();

//Если программа дошла до этого места, значит,

//все в порядке, можно продолжать и выполнить транзакцию

}

catch (SqlException)

{

Console.WriteLine("Exception occured, rolling back");

transaction.Rollback();

 

}

}

Console.WriteLine("After attempted inserts");

using (SqlCommand cmd = new SqlCommand(

"SELECT * FROM Books", conn))

using (SqlDataReader reader = cmd.ExecuteReader())

{

while (reader.Read())

{

Console.WriteLine("{0}\t{1}\t{2}", reader.GetInt32(0),

reader.GetString(1), reader.GetInt32(2));

}

}

}

}

catch (SqlException ex)

{

Console.Write(ex);

}

Console.ReadKey();

}

static string GetConnectionString()

{

return @"Data source=BEN-DESKTOP\SQLEXPRESS;

Initial Cata log=TestDB;Integrated Security=SSPI";

}

}

}

 

Из вывода программы понятно, что даже если первый оператор insert был вы­полнен безупречно, вставка данных не произойдет, потому что второй оператор insert в этой же транзакции закончился неудачей:

Before attempted inserts:

(до попытки совершить вставку):

 

1 Les Miserables 1862

2 Notre-Dame de Paris 1831

3 Le Rhin 1842

 

Exception occurred, rolling back

(Возникло исключение, откат)

 

After attempted inserts

(После попытки совершить вставку)

1 Les Miserables 1862

2 Notre-Dame de Paris 1831

3 Le Rhin 1842

 

Примечание

Такой подход не гарантирует, что база данных доступна, ведь на сервере могут воз­никнуть проблемы уже после того, как функция возвратила true. В конечном счете, код должен быть очень устойчив к сбоям. Однако, как показала практика, эта функция полезна при работе в сети с регулярно пропадающим соединением с базой данных.

Задания

Вариант 1

Создать на MS SQL Server однотабличную базу данных, представляющую собойсписок моделей продаваемых компьютеров.

Каждая запись должна содержать следующую информацию: марка компьютера, тип процессора, тактовая частота процессора, объем оперативной памяти, объем видеопамяти, цена компьютера в условных единицах и количество экземпляров, имеющихся в наличии.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

 

Вариант 2

Создать на MS SQL Server однотабличную базу данных учета нуждающихся в улучшении жилищных условий.

Каждая запись должна содержать следующие сведения: фамилия, количество членов семьи, дата постановки в очередь, занимаемая жилая площадь, необходимые жилищные условия (количество комнат и требуемая площадь).

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

 

Вариант 3

Создать на MS SQL Server однотабличную базу данных учета безработных на бирже труда.

Каждая запись должна содержать следующие сведения: фамилия, возраст, пол, образование, профессия, должность, стаж работы в последней должности, общий стаж работы, дата постановки на учет, желаемая зарплата, желаемая должность.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

 

Вариант 4

Создать на MS SQL Server однотабличную базу данныхмоделирующую работу станции техобслуживания автомобилей.

Каждая запись должна содержать следующие сведения: марка автомобиля, требуемая марка топлива, объем бака, жилая площадь, остаток топлива, объем масла, необходимость мойки..

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

 

Вариант 5

Создать на MS SQL Server однотабличную базу данныхмоделирующую риэлтерскую контору (купля-продажа жилья).

Каждая запись должна содержать следующие сведения: район, адрес, количество комнат, жилая площадь, год постройки дома, запрашиваемая стоимость, телефон продавца.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

 

Вариант 6

Создать на MS SQL Server однотабличную базу данных, содержащую информацию о файлах.

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

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 7

Создать на MS SQL Server однотабличную базу данных, содержащую информацию об автобусах.

Сведения о каждом автобусе содержат: номер автобуса, фамилию и инициалы водителя, номер маршрута, номер автобусного парка.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 8

Создать на MS SQL Server однотабличную базу данных учета заявок на авиабилеты.

Каждая заявка содержит: пункт назначения, номер рейса, фамилию и инициалы пассажира, желаемую дату вылета.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 9

Создать на MS SQL Server однотабличную базу данных учета книг в библиотеке.

Сведения о книгах содержат: УДК, фамилию и инициалы автора, название, год изда­ния, количество экземпляров данной книги в библиотеке.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 10

Создать на MS SQL Server однотабличную базу данных «Моя записная книжка».

Каждая запись в книжке должна содержать: фамилию и инициалы, дату рождения, адрес и но­мер телефона.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 11

Создать на MS SQL Server однотабличную базу данных учета заявок на обмен квартир и поиска вариантов обмена.

Каждая заявка содержит следующие сведения о квартире: город, количество комнат, площадь, этаж, район.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 12

Создать на MS SQL Server однотабличную базу данных учета кандидатов, участвующих в выбо­рах губернатора.

Каждая заявка от кандидата содержит: фамилию и инициалы, дату рождения, место рождения, индекс популярности.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 13

Создать на MS SQL Server однотабличную базу данных картотеки абонентов, содержащей сведения о телефонах и их владельцах.

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

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

Вариант 14

Создать на MS SQL Server однотабличную базу данных «Автоматизированная информационная система на желез­нодорожном вокзале».

Информационная система содержит сведения об отправлении поездов дальнего следования. Для каждого поезда указывается: номер поезда, тип поезда (пассажирский или пригородный), станция назначения, время отправления.

Для данной базы данных выполнить действия, указанные в разделе 4 настоящих методических указаний.

 

Литература

1 Нейгел, Кристиан. C# 4.0 и платформа.NET 4 для профессионалов.: пер. с англ./ Кристиан Нейгел, Билл Ивьен, Джей Глинн, Карли Уотсон. – М.: Вильямс, 2011. – 1440 с.

Лабораторная работа № 19

 

Работа с базами данных в С#

 

Время выполнения работы – 4 часа

 

 

 

 

Цель работы

Ознакомление с основой разработки Windows-приложений на языке C# для работы с базами данных.

Техническое обеспечение

2.1 Персональная ЭВМ IBM Pentium IV и более поздних моделей c оперативной памятью не менее 512 Мбайт.

2.2 Клавиатура.

2.3 Дисплей.

2.4 Манипулятор типа “мышь”.

Программное обеспечение

3.1 Операционная система Windows XP SP 3 более поздние версии Windows.

3.2 Система программирования Microsoft Visual Studio 2005 и более поздние версии.

Постановка задачи

Разработать консольное и Windows-приложения для однотабличной базы данных для СУБД Microsoft SQL Server, реализованной согласно варианта задания, которые приведены в разделе 6 настоящих методических указаний.

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

 

5 Базы данных в C#

Большинство приложений так или иначе обрабатывает данные. Эти данные час­то хранятся в реляционной базе данных, например, SQL Server, Oracle или MySQL (существует и множество других).

В этой главе обсуждаются основы работы с базами данных на платформе.NET. Если у вас на компьютере нет никакой базы данных, я рекомендую установить SQL Server Express Edition или MySql Community Edition, дистрибутивы для которых вы легко найдете в Интернете. Обе базы данных имеют компоненты, позволяющие создавать и редактировать базы данных непосредственно из Visual Studio.

Во всех примерах методических указаний используется база данных TestDB, содержащая единственную таблицу под названием Books. В первом разделе обсуждается созда­ние базы данных на сервере SQL Server.

 

Создание базы данных в Visual Studio

Задача. Вы хотите создать базу данных из среды Visual Studio.

Решение. Вначале установите сервер базы данных, например, SQL Server (для целей этих методических указаний отлично подойдет Express Edition). В то время как SQL Server ав­томатически интегрируется с Visual Studio, не исключено, что вам придется загру­зить дополнительные компоненты, чтобы базы данных от сторонних производите­лей могли работать в среде Visual Studio. В этом разделе предполагается, что вы используете SQL Server.

1) Откройте Server Explorer (в меню View (Вид) или комбинацией клавиш <Ctrl>+<W>, <L>).

2) Сделайте щелчок правой кнопкой мыши по Data Connections (Соединения с данными) и выберите Create New SQL Server Database (Создать базу данных в SQL Server).

3) Выберите экземпляр сервера в раскрывающемся списке и укажите метод аутен­тификации (в соответствии с настройками сервера).

4) Введите имя, например, TestDB и щелкните по кнопке ОК.

5) Разверните окно созданной базы данных.

6) Сделайте щелчок правой кнопкой мыши по Tables и выберите пункт Add New Table (Добавить новую таблицу).

7) Сконфигурируйте таблицу примерно так, как показано на рис. 17.1.

8) Закройте окно и дайте таблице имя Books.

9) Чтобы заполнить таблицу данными, сделайте на ней щелчок правой кнопкой мыши и выберите Show Table Data (Показать данные таблицы). Значения, ко­торые я добавил в свою таблицу, показаны на рис. 17.2.

Рисунок 17.1 – Конфигурация таблицы в тестовой базе данных

 

Рисунок 17.2 – Данные в таблице

 



Поделиться:


Последнее изменение этой страницы: 2016-04-26; просмотров: 3093; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.135.204.43 (0.014 с.)