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();


 

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

18504. Аналіз виробництва та реалізації продукції 149 KB
  Тема 4. Аналіз виробництва та реалізації продукції Значення завдання джерела даних та система показників аналізу. Аналіз ринку продукції підприємства. Аналіз обсягу випуску продукції. Аналіз випуску продукції за структурою і асортиментом. Аналіз по...
18505. Аналіз стану і використання основних засобів 124.5 KB
  ТЕМА 5. Аналіз стану і використання основних засобів 1. Значення завдання та джерела даних аналізу. 2. Аналіз виробничих потужностей підприємства. 3. Аналіз складу структури технічного стану і руху основних засобів 4. Аналіз узагальнюючих показників ефективності в
18506. Аналіз забезпеченості підприємства матеріальними ресурсами та їх використання 73 KB
  Тема 6 Аналіз забезпеченості підприємства матеріальними ресурсами та їх використання 1. Значення завдання та джерела даних аналізу предметів праці. 2. Загальна оцінка виконання плану матеріальнотехнічного постачання. 3. Аналіз складських запасів матеріальних ресу
18507. Аналіз використання трудових ресурсів 79.5 KB
  Тема 7. Аналіз використання трудових ресурсів Значення завдання та джерела даних аналізу кадрового потенціалу підприємства. Аналіз стану трудових ресурсів і забезпеченості ними підприємства. Аналіз використання робочого часу. Аналіз продуктивності прац
18508. Аналіз витрат підприємства і собівартості продукції 85.5 KB
  Тема 8 Аналіз витрат підприємства і собівартості продукції Значення завдання та джерела даних аналізу. Оцінка собівартості продукції за узагальнюючими показниками. Аналіз прямих витрат в собівартості продукції. Аналіз комплексних статей витрат.
18509. Аналіз фінансових результатів діяльності підприємства 134.5 KB
  Тема Аналіз фінансових результатів діяльності підприємства Значення система показників завдання та джерела даних аналізу фінансових результатів. Загальна оцінка рівня та динаміки формування фінансових результатів. Аналіз валового прибутку підприємства. ...
18510. Аналіз фінансового стану підприємства 173 KB
  Тема Аналіз фінансового стану підприємства Поняття значення завдання та джерела аналізу фінансового стану підприємства. Загальна оцінка майна та боргових прав підприємства аналіз зміни їх складу та структури. Загальна оцінка джерел формування майна підп
18511. Теоретические основы логистической деятельности 61 KB
  Лекция 1. Теоретические основы логистической деятельности. Понятие сущность логистики. Этапы развития логистики. Предмет и содержание логистики как науки. Основные понятия логистики. Принципы логистики. 1. Понятие сущно...
18512. Концепция логистики 36.5 KB
  Лекция 2. Концепция логистики. Концептуальные положения логистики. Цели и системы логистики. Концептуальные положения логистики. Концепция это система взглядов то или иное понимание явлений процессов. Концепцию логи...