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


 

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

45722. Основные тенденции развития газетной и журнальной периодики в России в XIX в 63.5 KB
  Основные тенденции развития газетной и журнальной периодики в России в XIX в. Герцен много сделал для развития газетножурнальных жанров революционного издания. В журналистике много места занимает личностный элемент авторитет лидера. Журнал Каткова орагнизованный в 1856.
45723. Журналистика России в период социально-экономических преобразований конца ХХ – начала XXI вв 41 KB
  Журналистика России в период социально-экономических преобразований конца ХХ – начала XXI вв. у федерального правительства из печатных СМИ имелись: Российская газета Российские вести Россия из электронных – телеканалы ОРТ РТР Культура Радио 1 Радио России радиостанция Маяк а также информационные агентства ИТАРТАСС РИАНовости Интерфакс. В постсоветский период в газетном мире России произошли значительные типологические изменения. начала вещание коммерческая российскофранцузская радиостанция Радио России –...
45725. Характеристика групп общественности в связях с общественностью 50.5 KB
  Целевая аудитория –- субъект коммуникационных технологических отношений Для PRкомпаний: целевая общсть – это те социальные субъекты социальные группы организации институты массовые аудитории которые согласно замыслам разработчиков PRкомпании являются или способны быть получателями PRсообщений. Сотрудники менеджеры и организации их объединяющие. Понятия внешней и внутренней общественности связаны с организаций PRмероприятий для социальной организации или института. Внешней открытой общественностью для любого социального...
45726. Структура отечественного PR-рынка 73 KB
  Довольно быстро был пройден период 1988-1991 годов когда на российском рынке PR доминировали зарубежные агентства. Создаются первые отечественные PRагентства: Николо М Имидж-ленд ПР Имидж-контакт. Прежде всего агентства различного типа и специализации prагентства.субъекты: ПР-агентства.
45727. Основные этапы развития слуховой функции у ребенка. Особенности исследования слуха у детей (шепотной, разговорной речью, камертонами) 15.49 KB
  Закладка слухового анализатора происходит на 5–7 неделе внутриутробной жизни. Начиная с 20–й недели беременности, плод различает частоту и интенсивность звука.
45728. Рото- и гортаноглотка, строение, назначение и иннервация, возможные заболевания 16.18 KB
  Ротоглотка - это щелевидное пространство спереди которой располагается зев, который образован сверху мягким небом и передней и задней дужками по бокам, передняя небно-язычная мышца, между ними располагаются небные миндалины.
45729. Субъектное пространство и сферы паблик рилейшнз 49 KB
  Вопросы которые задают субъектное пространство PRдеятельности: Кому чему делается PR предметный Для кого функциональностратегический = базисный. Базисный субъект: Именно он выступает основанием для начала PRдеятельности у него образуется потребность в оптимизации коммуникационного пространства он задает исходные параметры PRдеятельности часто формирует заказ подписывает и финансирует контракт. Для кого функциональностратегический Исходный технологический субъект – лицо осуществляющее PRдеятельность которое может...
45730. Общественное мнение: понятие, диагностика, технологии формирования. Диагностика общественного мнения: цели, подходы, методики измерения 40 KB
  Общественное мнение: понятие диагностика технологии формирования. ОМ при этом вступает как совокупное мнение соответствующего субъекта имеющее внутр. Программы деятсти субъектов ПР нацелены на: убедить людей изменить своё мнение; сформировать ОМ когда его нет; усилить существующее ОМ. Характерные признаки ОМ: Направленность – преобладающее установившееся мнение за и против к опред.