69090

ТЕХНОЛОГІЯ ADO .NET. ПРИЄДНАНІ ОБ’ЄКТИ

Лекция

Информатика, кибернетика и программирование

В лекції 8 розглядалася модель об’єктів ADO .NET (ActiveX Data Objects .NET), в якій є дві групи класів, що виконують чітко визначені задачі при роботі з базою даних: класи приєднаних об’єктів забезпечують встановлення з’єднання з базою даних і управління базою даних збоку застосування.

Украинкский

2014-09-29

59.66 KB

3 чел.

7

ЛЕКЦІЯ 10. ТЕХНОЛОГІЯ ADO .NET. ПРИЄДНАНІ ОБ'ЄКТИ

План

10.1 Об’єктна модель ADO .NET. Приєднані об'єкти

10.2. Встановлення звязку з БД

10.3. Маніпулювання даними. Об’єкт Command

10.3.1. Читання даних

10.3.2. Оновлення і вставка записів в таблицю бази даних

10.3.3. Видалення даних

10.1 Об’єктна модель ADO .NET. Приєднані об'єкти

В лекції 8 розглядалася модель об’єктів ADO .NET (ActiveX Data Objects .NET), в якій є дві групи класів, що виконують чітко визначені задачі при роботі з базою даних:

- класи приєднаних об'єктів забезпечують встановлення з'єднання з базою даних і управління базою даних збоку застосування. Потребують постійного зв’язку з базою; 

- класи від'єднаних об'єктів забезпечують збереження, використання і перетворення отриманої від бази даних інформації на стороні застосування.

В цій лекції ми зупинимося на роботі з приєднаними об'єктами.

Об'єкт класу Connection представляє з'єднання з джерелом (базою) даних.

Об'єкт Command виконує запит SQL, який може бути у формі вбудованого тексту, процедури серверу, або прямого доступу до таблиці.

Об'єкт Parameter дозволяє передати параметри команді.

Об'єкт DataReader дозволяє читати дані з бази даних.

Приклад

В цій лекції ми розглянемо роботу з базою даних за допомогою приєднаних об'єктів.  Для демонстрації будемо використовувати таблицю Student, створену раніше в базі даних  ..\\SQLEXPRESS\\LabDB.

Створимо новий проект, на формі розмістимо випадаючий список, текстові поля, а також кнопки для роботи з даними (рис.10.1).

Рис. 10.1. Графічний інтерфейс програми

10.2. Встановлення зв‘язку з БД

Об'єкт класу Connection представляє з'єднання з джерелом (базою) даних і забезпечує підключення до бази даних. Visual Studio .NET підтримує декілька  класів провайдерів, основні з яких:

1. SQLConnection - підключення до SQL Server 7.0 і вище;

2. OleDbConnection  - підключення до інших варіантів БД;

3. OdbcConnection – підключення до будь-яких джерел даних через інтерфейс ODBC;

4. OracleConnection – підключення до СКБД Oracle.

OleDbConnection, SqlConnection, OdbcConnection — спадкоємці класу Connection, специфічні для провайдерів OleDb, MS SQL, ODBC відповідно.

Об'єкт Connection має властивість ConnectionString, в якій фіксується вся необхідна для встановлення з'єднання з БД інформація.

Таблиця 10.1. Основні властивості класу Connection

Властивість

Опис

DataSource

Шлях до бази даних у файловій системі при використовуванні Oledb, ім'я екземпляра бази серверу при використовуванні SqlConnection

Database

Повертає ім'я бази даних, використовуваної в об'єкті Connection після відкриття

State

Повертає поточний стан з'єднання. Можливі значення — Broken, Closed, Connecting, Executing, Fetching і Open

ConnectionString

Рядок з'єднання з СКБД

Приклад

//рядок з'єднання з сервером

       string strConnection = "Data Source=ТАНЯ-ПК\\SQLEXPRESS;Initial Catalog=labDB;Integrated Security=True";

Так як підключатися до бази даних потрібно в різних обробниках елементів форми, доцільно створити один метод, який викликати в потрібних місцях коду.

Створимо новий метод підключення до SQL серверу і розмістимо його в класі Form1.

Розмістимо в коді форми метод, який підключає до бази даних:

      SqlConnection Connection

       {

           get

           {

               if (con == null)

               {

                   con = new SqlConnection(strConnection);

               }

               if (con.State != ConnectionState.Open)

               {

                   con.Open();

               }

               return con;

           }

       }

Створимо також змінну    SqlConnection con;

10.3. Маніпулювання даними. Об’єкт Command

В ADO.NET для роботи з даними можуть використовуватися команди, реалізовані у вигляді SQL-запитів або збережувані процедури.

Примітка

Збережувана процедура – це невелика програма на мові СКБД, яка зберігається і виконується на сервері.

Об'єкт Command виконує запит SQL, який може бути у формі вбудованого тексту, процедури серверу, або прямого доступу до таблиці. Якщо це запит на вибірку даних SELECT, то дані звичайно поміщаються в об’єкт DataSet або в об’єкт DataReader.  

Властивість CommandType може приймати значення з переліку CommandType. За замовчанням це Text, тобто виконується безпосередньо текст команди SQL, який записаний у властивості Command.  

Щоб виконати запит, властивості Connection об'єкту Command слід задати ім'я створеного об'єкту Connection:

Приклад

 conn.ConnectionString = ConnectionString;

conn.Open();

SqlCommand myCommand = new SqlCommand ();

myCommand.Connection = conn;

Об'єкт Connection також має метод CreateCommand, що дозволяє спростити даний процес, - цей метод повертає новий об'єкт Command для об'єкту Connection:

SqlConnection conn = new SqlConnection ();

conn.ConnectionString = ConnectionString;

conn.Open();

SqlCommand myCommand = conn.CreateCommand();

Ці два способи еквівалентні.

Приклад

SqlCommand myCommand = myConn.CreateCommand();

Основні методи об’єкту Command, які забезпечують виконання запитів до бази даних – це ExecuteNonQuery, ExecuteScalar і ExecuteReader.

Для виконання запиту потрібно спочатку підготувати рядок з текстом оператора SQL і передати його в обєкт Command для виконання. Після цього викликати потрібний метод.

Метод ExecuteNonQuery використовується для виконання запитів, які не повертають дані. Це запити типу UPDATE, INSERT і DELETE - вони вносять зміни в таблицю бази даних, не повертаючи дані в результаті виконання, а тільки кількість оновлених, вставлених і видалених записів.

Метод ExecuteScalar використовується, якщо потрібно повернути з бази даних одне значення.

Метод ExecuteReader використовується, якщо потрібно повернути набір записів як результат оператору Select.

10.3.1. Читання даних

Метод об’єкту CommandExecuteReader використовується для отримання набору записів з бази даних. Особливістю цього методу є те, що він повертає спеціальний об'єкт DataReader, в якому зберігаються записи.

Цей метод вимагає наявності постійного підключення до бази даних для читання і перегляду даних, крім того, він відкриває дані тільки для читання в одному напрямі.

Приклад

Об'єкт reader створюється в результаті виклику методу Execute Reader об'єкту myCommand:

SqlDataReader reader = myCommand.ExecuteReader();

Об'єкт DataReader повертає набір даних типу object, причому для доступу до полів можна використовувати індекс.

Заповнимо випадаючий список прізвищами студентів з таблиці Student

      private void Form1_Load(object sender, EventArgs e)

       {

           //соединяемся с бд и заполняем список студентов

           con = Connection;

           SqlCommand cmd_get = con.CreateCommand();

           cmd_get.CommandText = "SELECT Student_ID,Student_name from Student";

           using (SqlDataReader reader = cmd_get.ExecuteReader())

           {

               while (reader.Read())

               {

                   Student_ID = reader.GetInt32(0);

                   string Student_name = reader.GetString(1);

                   comboBox1.Items.Add(Student_name);

               }

            }

           con.Close();

       }

При виборі елемента із списка будемо відображати його дані в текстових полях. Так як ми використовуємо приєднані об'єкти, то кожний раз з бази даних вибираємо тільки один запис.

Зверніть увагу, що ми не виводимо на форму поле Student_ID, так як воно є первинним ключем (PK), а будемо його нарощувати програмно. Для цього на рівні класу визначимо змінну:

int Student_ID;  //для ключа.

В обробнику події вибора зі списку напишемо код:

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

       {

           //

           if (comboBox1.SelectedIndex != -1)

           {

               con = Connection;

               SqlCommand cmd_select = con.CreateCommand();

               string selectedStudent = comboBox1.SelectedItem.ToString();

               cmd_select.CommandText = "SELECT * from Student where Student_Name = '" + selectedStudent + "'";

               using (SqlDataReader reader = cmd_select.ExecuteReader())

               {

                   reader.Read();

                   txtName.Text = reader.GetString(1);

                   txtRating.Text = reader.GetDecimal(2).ToString();

                   txtGroup.Text = reader.GetString(3);

               }

               con.Close();

           }

       }

Додавання нових записів. В обробник кнопки Додати вставимо очистку полів.

private void btmAdd_Click(object sender, EventArgs e)

       {

           //додати студента

           txtName.Text = "";

           txtRating.Text = "";

           txtGroup.Text = "";

 }

10.3.2. Оновлення і вставка записів в таблицю бази даних

Тепер реалізуємо роботу з даними з допомогою методу ExecuteNonQuery.

В обробник кнопки Зберегти вставимо код для оновлення чи додавання запису.

private void btmUpdate_Click(object sender, EventArgs e)

       {

           //зберегти зміни

           con = Connection;

           string Student_name= txtName.Text;

           decimal Rating= Convert.ToDecimal(txtRating.Text);

           string Group=txtGroup.Text;

           SqlCommand cmd_select = con.CreateCommand();

           cmd_select.CommandText = "SELECT * from Student where Student_Name = '" + Student_name + "'";

           SqlDataReader rdr = cmd_select.ExecuteReader();

           rdr.Read();

           if (rdr.HasRows)

           {

               rdr.Close(); //закрити rdr

               //  Update - такий студент вже є

               SqlCommand cmdUpdate = con.CreateCommand();

               cmdUpdate.CommandText = "UPDATE Student SET Student_name = '" + Student_name + "', Rating='" +

                    Rating + "', Group1='" + Group +"' WHERE Student_name = '" + Student_name + "'";

               MessageBox.Show(cmdUpdate.CommandText);

               int n = cmdUpdate.ExecuteNonQuery();

               MessageBox.Show("Обновлено записей: " + n);

            }

           else

           {

               //Insert - добавить нового преподавателя в бд

               rdr.Close();  //закрити rdr

               Student_ID += 1; //нарощуємо Student_ID

               string cmdInsert = "INSERT INTO Student (Student_ID,Student_name, Rating, Group1)" +

               "VALUES (" + Student_ID + ",'" + Student_name + "'," + Rating + ",'" + Group + "')";

               MessageBox.Show(cmdInsert);

               SqlCommand cmd_insert = new SqlCommand(cmdInsert, con);

               int n = cmd_insert.ExecuteNonQuery();

               MessageBox.Show("Вставлено записей: " + n);

               comboBox1.Items.Add(Student_name);

           }

 

           con.Close();

           

}

Зверніть увагу, що метод ExecuteNonQuery() в результаті виконання повертає кількість вставлених чи оновлених записів.

10.3.3. Видалення даних (Delete)

Нам залишилося реалізувати видалення записів.

private void btmDelete_Click(object sender, EventArgs e)

      {

           //Delete - видалити

           con = Connection;

           SqlCommand cmdDelete = new SqlCommand("DELETE FROM Student WHERE Student_name='" + txtName.Text + "'", con);

           int n = cmdDelete.ExecuteNonQuery();

           MessageBox.Show("Удалено записей: " + n);

           if (n > 0)

           {

              comboBox1.Items.Remove(comboBox1.SelectedItem);

              txtName.Text = "";

              txtRating.Text = "";

              txtGroup.Text = "";

           }

           con.Close();

 }

Висновки

Приєднані об'єкти працюють швидше, ніж від'єднані, але потребують постійного зв'язку з базой даних, що неможливо для розподілених систем з великою кількістю користувачів. Їх використання доційно в локальних проектах.

Контрольні запитання і завдання для самостійного виконання

1. Яка різниця між приєднаними і від'єднаними об'єктами?

2. Яке призначення об'єкту класу Connection і які його основні властивості та методи?

3. Яке призначення об'єкту Command? 

4. Яке призначення об'єкту DataReader?

5. Назвіть основні методи об'єкту Command та їх призначення.

6. Яка різниця між методами ExecuteNonQuery і ExecuteReader?

7.Що означає запис

SqlDataReader reader = myCommand.ExecuteReader();

8. Як вставити в таблицю бази даних новий рядок? Який метод потрібно використати?

9. Як видалити з таблиці бази даних рядок?

10. Що означає метод

     con.Close();


 

А также другие работы, которые могут Вас заинтересовать

34122. Психодиагностика. Ответы на экзаменационные вопросы 501.5 KB
  Именно это и явилось основной предпосылкой возникновения психодиагностики как отдельной области научных знаний и системы методов исследования. Причиной этому послужили успехи в области исследования хромосомных болезней человека. Основным в исследованиях XIX века является то что психическое становилось особой областью экспериментального исследования отличной от физиологии. наибольшее влияние на становление психологической диагностики оказали экспериментальная психология диффференцальная психология прикладная психология и тестология;...
34123. Возрастная психология. Ответы на экзаменационные вопросы 811 KB
  Возрастная психология или психология развития направлена на исследование особенностей проявления и развития психики человека в различные возрастные периоды. Системное рассмотрение всего жизненного цикла позволяет выявить общие закономерности индивидуального развития человека и использовать их для решения таких существенных задач возрастной психологии как: Научное обоснование возрастных норм психофизиологических функций. Научное прогнозирование развития человека развертывание психических ресурсов человека. Определение наиболее...
34124. Психоаналитические теории характеров. Ответы на экзаменационные вопросы 397 KB
  Мазохистические и депрессивные паттерны характера в значительной степени совпадают особенно на невротически здоровом уровне организации личности. Важно понимать различия между этими двумя психологиями потому что особенно на пограничном и психотическом уровнях организации личности требуется применение существенно различающихся терапевтических стилей. Эти решения могут представать как чередующиеся состояния Эго особенно на уровне пограничной организации личности приводя терапевта в замешательство понимать ли этого пациента как...
34125. Педагогическая психология. Экзаменационные вопросы с ответами 534 KB
  Специфика такого аспекта связана с тем что образовательный процесс рассматривается как организованная деятельность по передаче и усвоению социокультурного опыта такой процесс выступает как контекстная среда развития и социализации личности. Определение связи между уровнем интеллектуального личностного развития обучающегося и формами методами обучающего и воспитывающего воздействия сотрудничество активные формы обучения и др. Структура: три раздела: Психология обучения исследующая закономерности протекания процесса обучения...
34126. Социальная психология. Ответы на экзаменационные вопросы 816.5 KB
  Было обнаружено сильное влияние социальной группы на поведение и установки ее членов. Объектом социальной психологии являются конкретные социальные общности группы людей и отдельные их представители. Социально-психологические явления возникающие в организованных общностях людей к которым относятся большие и малые группы. Личность которая в процессе взаимодействия и общения с другими личностями представляет собой совершенно иной феномен нежели индивид не включенный в различные социальные группы и межличностные отношения.
34128. Смешанная экономика и проблемы моделирования ее состояния 15.09 KB
  В них сочетаются преимущества традиционной командной и рыночной экономики. В такой системе участники хозяйства прислушиваются к выводам экономистов и в ней выполняются законы и принципы экономики. Практическая реализация данных моделей способствовала созданию экономического чуда стремительного развития экономики в этих странах. Одной из перспективных моделей экономического развития общества является модель социальной рыночной экономики созданная и воплощенная в реальность немецким экономистом и политическим деятелем Людвигом Эрхардом.
34129. Кейнсианская модель государственного регулирования экономики 19.7 KB
  Кейнсианская модель государственного регулирования экономики Кейнсианская модель государственного регулирования экономики Анализируя экономические процессы конца 20х начала 30х г. Кейнс попытался доказать иллюзорность идеи самокорректирующейся экономики капитализма. Отсюда выводится необходимость широкомасштабного государственного регулирования экономики подправляющего сбои ее чисто рыночного развития. Выдвижение в качестве определяющего направления государственного регулирования экономики стимулирования спроса.
34130. Монетаризм и экономическое регулирование 15.82 KB
  МОНЕТАРИ́ЗМ Monetrism направление современной экономической теории сторонники которого в отличие от кейнсианцев главным источником нестабильности экономической системы считают денежную сферу и нарушение ее функционирования. Суть монетарной теории В противовес кейнсианской теории Фридмен и его сподвижники выдвинули монетарную теорию определения уровня национального дохода и монетарную теорию экономического цикла. Согласно этой теории важнейшее значение имеет расхождение между денежным спросом и его предложением. Рост денежного предложения...