69090

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

Лекция

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

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

Украинкский

2014-09-29

59.66 KB

4 чел.

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


 

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

80965. Проблема вивчення пізнавальних можливостей школярів у методиці навчання історії 36.03 KB
  Пізнавальні можливості учнів відносяться до основних факторів процесу навчання і безпосередньо впливають на цілі зміст і характер навчальної роботи. Зокрема з урахуванням пізнавальних можливостей учнів визначається рівень викладу навчального матеріалу у шкільних підручниках адаптується та опрацьовується учителем і учнями матеріал конкретних уроків готуються варіанти пізнавальних завдань і т. Відповідно до пізнавальних можливостей учнів даного класу формулюються й уточнюються завдання конкретного уроку. Без аналізу пізнавальних можливостей...
80966. Проаналізуйте розвиток шкільної історичної освіти в Україні в ХІХ-ХХ ст 35.13 KB
  Початок систематизованого викладання історії в Україні пов`язаний із створенням Харківської колегії. Започатковується вивчення історії і в Галичині. Левицький видав у 1821 році наказ семінаристам займатися вивченням рідної історії. Свій внесок у зародження методики вивчення історії внесли і повітові училища та гімназії навчальна база яких передбачала наявність у їхніх бібліотеках книг з історії.
80967. Пізнавальні процеси у навчанні історії 41.83 KB
  Найважливішим серед пізнавальних процесів є сприйняття - наочно- образне, просторово-часове відбиття у свідомості людини предмета, ( явища, яке базується на різних відчуттях (колір, звуки, запахи, форма, обсяг та інші), розумінні предмета чи осмисленні його на основі попереднього досвіду (далекість, швидкість, напрямок руху, тривалість процесів й інші властивості).
80968. Визначте методику роботи з історичними картами на уроках історії в школі 33.82 KB
  Важливим джерелом інформації є історична карта яка відображає особливості розвитку людства в минулому. Робота з історичними картами є наочним методом. Настінна карта зазвичай відображає великі території містить відомості щодо тривалих історичних періодів й різних аспектів історичного процесу.
80969. Особливості пізнавального інтересу учнів до історії 35.74 KB
  Метою розвитку мотиваційної сфери учнів у навчанні історії виступає формування стійкого інтересу до предмета що передбачає активне емоційнопізнавальне ставлення школярів до досліджуваних історичних подій до зясування їхніх причин і наслідків а також до оволодіння вміннями необхідними для всебічного вивчення минулоі о і сучасності на основі різноманітних джерел. Отже одним із важливих завдань навчання в умовах цілісної методичної системи є підвищення рівня розвитку інтересу. У числі загальних зовнішніх причин падіння інтересу...
80970. Організація самостійної роботи учнів при вивченні теми: «Виникнення та розвиток Київської Русі » (7 клас) 39.16 KB
  Проблема диференційованого підходу до учнів у навчанні історії. Диференційоване навчання організація навчальновиховного процесу з урахуванням типових індивідуальних особливостей учнів. Складнішим і ефективнішим видом диференційованого навчання є здійснення його в умовах поділу класу на групи залежно від рівня навчальних можливостей учнів.
80971. Планування роботи із контурною картою при вивченні теми: «Великі географічні відкриття: зустріч цивілізацій» (8 клас) 37.85 KB
  Розглядаючи тему: Великі географічні відкриття доба відкриттів європейськими мореплавцями невідомих раніше морів та океанів островів і континентів здійснення першої навколосвітньої морської подорожі колонізації заморських територій кінець XVсеред. Нові географічні відкриття зумовлювалися насамперед бурхливим розвитком продуктивних сил прагненням європейців задовольнити зрослі потреби в дорогоцінних металах і прянощах відповідно пошуками морських шляхів до Китаю та Індії. Великі географічні відкриття стали можливими завдяки значному...
80972. Способи вивчення пізнавального інтересу учнів до історії 38.89 KB
  В учнівських диктантах було відтворено від 8 до 21 інформаційних одиниць. Діагностуючий диктант допомагає вчителю вчасно звернути увагу на труднощі в сприйнятті й осмисленні історичного матеріалу що є в учнів даного класу 9віку0. Якщо взяти за основу зміни особистісних особливостей учнів то в своїй роботі у напрямку посилення пізнавального інтересу учнів до історії перш за все беру до уваги що учні основної школи та старшої школи мають зовсім різну підготовки виходячи з їх віку.
80973. Дайте оцінку сучасним вимогам до уроків історії 39.52 KB
  Розуміння і виконання вчителем сучасних вимог до уроку які визначаються соціальним замовленням. Оптимального балансу в змісті уроку компонентів світової національної регіональної та локальної історії. Творчою емоційної атмосфери заснованої на інтерес учнів до змісту уроку та видами навчальної роботи...