Далее нужно создать экземпляр класса SqlConnection и в качестве параметра в Конструктор передаем connectionString.



Лабораторная работа 2. Работа с БД из приложения Window Forms.

В среде разработки MS Visual Studio создадим приложение Window Forms. Назовем его «Лабораторная работа №2».

На форме установим:

Компонент menuStrip1, в него внесем в первое окошечко Файл, в следующий - Справка. Под Файлом в подраздел запишем Выход.

2) компонент TabControl. В свойстве Dock двойным щелчком выберем Fill, чтобы компонент раскрылся на весь экран. В свойстве TabPages (Редактор коллекции вкладок),
для первой команды TabPage1 свойство Text изменить на SELECT
для второй команды TabPage2 свойство Text изменить на INSERT, в свойстве BackColor изменим цвет вкладки на бледно зеленый PaleTurquois;;
добавить третью команду TabPage3 и свойство Text изменить на UPDATE, в свойстве BackColor изменим цвет вкладки на светло-коричневый RosyBrown;
добавить четвертую команду TabPage4 и свойство Text изменить на DELET, в свойстве BackColor изменим цвет вкладки на светло-голубой LightCyan.

3) Далее во вкладку SELECT поместим ListBox и растянем его на всю вкладку помощью свойства Dock выберем Fill. Он нам нужен для того, чтобы выводить содержащуюся в БД информацию.
Во вкладке INSERT поместим два компонента textbox, два компонента label, один компонент button, привести к виду

Во вкладке UPDATE помести такие же компоненты, можно выделить все компоненты во вкладке INSERT и вставить на вкладке UPDATE. Измените название кнопки на «Изменить». Так же на этой вкладке мы должны добавить ключевой поле ID, для того чтобы изменяя запись мы знали, что его ключевое поле остается неизменным. Для этого добавим компоненты textbox и label.

Во вкладке DALETE помести компоненты textbox, label, button. Кнопку переименовать в УДАЛИТЬ.

4) Создадим базу данных. Для этого в окне «Обозреватель решений» кликаем правой клавишей по нашему проекту, выбираем Создать элемент – База данных, основанная на службах – назовем DataBase.mdf, нажмем «Добавить». У нас в Обозревателе решений в пункте Database.mdf должен появиться подпункт Database_log.ldf.
Далее два раза щелкаем по Database.mdf и в открывшемся окне «Обозреватель серверов» у нас появляется эта база данных
с таблицами и т.д.

5) В БД пока нет созданных таблиц. Создадим таблицу в БД. Для этого щелкнем правой клавишей мышки по разделу Таблица и выберем «Добавить новую таблицу».
В нижней части окошка Конструктора в текстовом поле появился скрипт, который будет выполняться, когда мы нажмем на кнопку обновить БД (верхняя левая кнопка в окне «Конструктор». Для того чтобы работать с БД нужно писать к ней запросы на языке SQL. В нижнем окне Конструктора находится текстовое поле, в котором по мере работы с Конструктором составляется скрипт.
Примечание. Скрипты можно составлять и без Конструктора, составляя запросы самостоятельно, для этого выбираем «Обозреватель серверов», кликаем правой мышкой по БД, выбираем «Новый запрос» и в открывшемся окне пишем скрипт (запрос).

6) В этой лабораторной работе мы не будем самостоятельно создавать запросы, воспользуемся Конструктором. Первая колонка – идентификатор, она создается по умолчанию.
Это поле (колонку) сделаем автоматически инкрементируемым, для этого кликаем на записиID в поле с ключиком и свойствах выбираем Спецификация идентификаторов – Идентификатор два раза щелкаем - меняем на True.
Примечание. Можно сделать тоже самое вручную дописав в скрипт IDENTITY
[Id] INT NOT NULL PRIMARY KEY IDENTITY

Переименуем таблицу, в первую строку скрипта поменяем Table на Products

CREATE TABLE [dbo].[Products]

(

          [Id] INT NOT NULL PRIMARY KEY IDENTITY,

[Name] NVARCHAR(50) NULL,

[Price] NVARCHAR(50) NULL

7) Следующим шагом мы должны обновить БД – Кнопка «Обновить» в верхнем левом углу окна Конструктор. В открывшемся окне выбираем – Обновить БД.
После обновления БД посмотрим в Обозревателе серверов – Таблицы - появилась таблица Products с идентификатором и полями.
Кликнув правой кнопкой мыши по таблице Products, выберем в открывшемся меню «Показать таблицу данных». Теперь можно заполнить таблицу данными.

8) Теперь будем писать запросы, пользуясь средствами языка С#.
После запуска приложения в закладке SELECT должны появляться продукты из таблицы Products. Для этого выполним следующее:
- два раза кликнем по форме «Лабораторная работа 1» или активизируем форму – События – выбираем Load. Событие срабатывает, когда загружается форма.
При загрузке формы должно срабатывать подключение к БД.
Для работы с БД в С# есть специальная сборка для этого:

using System.Data;

using System.Data.SqlClient;

Создаем переменную типа SqlConnection для того, чтобы соединится с БД будем использовать объект SqlConnection. Объявляем его как поле класса, чтобы к нему можно было осуществить доступ из методов разработчиков событий, которые создадим далее.

namespace WindowsFormsApp9

{

public partial class Form1 : Form

{

   SqlConnection SqlConnection;

10)  Для подключения к БД нам нужно получить физическое расположение БД. Для этого кликаем по «Обозревателю серверов» - выбираем контекстное меню БД – Свойства. В окне свойств находим строку «Строка подключения», двойным щелчком выбираем путь, копируем его Ctrl+C. Затем в событии Load на форму создаем переменную типа string с именем connectionString и присваиваем ей это значение, переведя его в генекод так как во вставляемой строке есть «\» и компилятор его подчеркнет (поставим перед ним @). Т.о. мы получили физическое расположение нашей БД.

private void Form1_Load(object sender, EventArgs e)

   {

       string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Zema\source\repos\WindowsFormsApp9\WindowsFormsApp9\Database.mdf;Integrated Security=True";

   }

Далее нужно создать экземпляр класса SqlConnection и в качестве параметра в Конструктор передаем connectionString.

Теперь сделаем наше соединение открытым. Это нужно делать в другом потоке, те открыть асинхронно, что позволит не тормозить пользовательский интерфейс. Для этого на экземпляре класса SqlConnection создадим метод SqlConnection.OpenAsync (). Открываем соединение с БД с помощью асинхронного метода. Для того чтобы все работало объявим метод загрузки страницы как async, написав перед типом возвращаемого значения оператор async, а затем в коде открываем соединение с БД.

private async void Form1_Load(object sender, EventArgs e)

   {

       string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Zema\source\repos\WindowsFormsApp9\WindowsFormsApp9\Database.mdf;Integrated Security=True";

       SqlConnection = new SqlConnection(connectionString);

       await SqlConnection.OpenAsync();//открыли асинхронный  

   }

Для того, чтобы отобразить нашу таблицу Products на закладке SELECT используем SqlDataReader, он позволяет получать таблицу в табличном представлении, и объект SqlReader, присвоим ему значение null. У SqlReader есть несколько важных методов, которые позволяют, в частности считывать БД.
Напишем запрос к БД. Мы знаем, что запрос можно писать напрямую через скрипт, а можно использовать класс SqlCommand.Создадим экземпляр класса command. В качестве параметров класса SqlCommand будем передавать два параметра, первый параметр – это инструкция-запрос к БД, вторым параметром должны передать соединение SqlConnection, иначе классу SqlCommand будет не понятно куда отправлять запрос.
Далее идет обработка исключения с выводом сообщений. В самой обработке (после try) объекту класса SqlReader присваивается значение, которое будет возвращено из метода, который мы вызовем на экземпляре класса SqlCommand.
Метод ExecuteReaderAsync()считывает данные. Далее мы должны пройтись с помощью цикла while по всей считанной информации, для этого мы будем использовать метод Read вызванный при sqlDataReader. Read метод логический, он возвращает bool и перемещает SqlReader к следующей записи. В цикле мы будем заполнять listBox.

private async void Form1_Load(object sender, EventArgs e)

   {

       string connectionString = @"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=C:\Users\Zema\source\repos\WindowsFormsApp9\WindowsFormsApp9\Database.mdf;Integrated Security=True";

       SqlConnection = new SqlConnection(connectionString);

       await SqlConnection.OpenAsync();//открыли асинхронное соединение с БД 

       SqlDataReader SqlReader = null;//объявили объект класса, SqlDataReader позволяет получать данные в табличном представлении

       SqlCommand command = new SqlCommand("SELECT * FROM [Products]", SqlConnection);//SqlConnection - куда посылать запрос

 

       try

       {

           SqlReader = await command.ExecuteReaderAsync();//объекту класса присваивает значение которое будет возвращено из метода, который мы вызовем на экземпляре класса SqlCommand

           while (await SqlReader.ReadAsync())//для проверки всей считанной информации мы должны использовать метод ReaderAsyn, вызванный на экземпляре SqlReader

           {//в этом цикле будем заполнять ListBox элементами из БД

               listBox1.Items.Add(Convert.ToString(SqlReader["Id"]) + " " + Convert.ToString(SqlReader["Name"]) + " " + Convert.ToString(SqlReader["Price"]));

           }

       }

       catch (Exception ex)

       {

           MessageBox.Show(ex.Message.ToString(), ex.Source.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);

       }

       finally //проверяется в любом случае, если пустой, то закрывается

       {

           if (SqlReader != null)

               SqlReader.Close();

       } }

11)  Перейдем на форму Form1.cs[Конструктор] и два раза кликнув по подразделу меню Выход, вызовем метод обработки нажатия

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

   {//для того чтобы не было утечки памяти, нужно закрывать соединение

       if (SqlConnection != null && SqlConnection.State != ConnectionState.Closed)

           SqlConnection.Close();

}


Дата добавления: 2021-06-02; просмотров: 110; Мы поможем в написании вашей работы!

Поделиться с друзьями:






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