69090

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

Лекция

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

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

Украинкский

2014-09-29

59.66 KB

5 чел.

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


 

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

58989. Види мистецтва та специфіка їх художньо-образної мови 34 KB
  Мета: ознайомити учнів з поняттями мистецтво про просторові часові та просторовочасові синтетичні види мистецтв; поняттям образ у мистецтві Обладнання: презентація Види і мова мистецтва ОСК Тип уроку: засвоєння нового матеріалу.
58991. Урок виховання любові до природи. Вмійте природу любити 55.5 KB
  Тож давайте за розум візьмемося ми Чисте повітря і воду живу Будемо завжди берегти. Сьогодні ми поговоримо про нас людей які нищать природу: зривають квіти руйнують пташині гнізда ламають дерева забруднюють водойми повітря щоб тільки задовольнити свої забаганки збагатитися.
58992. Воєнно-політичні події 1650-1653 рр 64 KB
  Після укладення угоди з поляками татари почали вимагати від Хмельницького припинення воєнних дій а від короля виконання умов Зборівської угоди. Уже втретє хан зрадив Хмельницького. Лупул звернувся по допомогу до Хмельницького.
58993. Голодомор в Україні. Позакласний захід вшанування памяті тих, хто загинув в 1932-1933 роках 60.5 KB
  Радянський уряд, яким керував Йосиф Сталін, вимагав від робочих все більше хліба, мяса, молока. Бідні селяни перебивались з хліба на картоплю, але згодом і цього не стало. Люди ховали картоплю, зерно в ями, де тільки можна, та нічого не втаїли від ока збирача.
58994. Голодомор в Україні 1932-1933 рр. Причини, наслідки 53 KB
  Ініціаторами знищення непокірних українців були Ленін і Сталін. Саме Сталін і його прибічники наказали відібрати в українських селян усе, що вони виростили на полях, щоб людям зимою не було чого їсти. І цей наказ старанно виконали...
58995. Грати за правилами. Конспект уроку з основ суспільствознавства, етики 38.5 KB
  Для другої гри: декілька залежить від кількості гравців однакових копій настільної гри типу Подорож така ж кількість ігрових костей по одній унікальній ігровій фігурці наприклад з яєць Сюрприз для кожного із гравців...
58996. Гроші, їх види та функції 63.5 KB
  Механізми що приводять у дію економіку досить складні але один з найдавніших і важливих гроші. Як економічний механізм гроші відомі нам з раннього дитинства з першої монетки чи банкноти. Рольова гра учні класу виступають у ролі представників наукових...
58997. День Святого Миколая 52.5 KB
  Тим часом не так давно в Україні Новий рік зустрічали зі Святим Миколаєм більше знаним у народі як Миколайчудотворець. У зимову ніч з 18 на 19 грудня святий Миколай спускався на срібній вервечці з неба. Миколайугодник один з найулюбленіших народних святих з іменем якого...