Mavzu: DataAdapter



Yüklə 0,6 Mb.
Pdf görüntüsü
səhifə4/6
tarix29.12.2021
ölçüsü0,6 Mb.
#48665
1   2   3   4   5   6
DataAdapter

Bog'langan jadvallar 

Ma'lumotlarni o'zgartirish so'rovlarini nazorat qilishimiz bizga ma'lumotlarni saqlash jarayoni 

bo'yicha cheksiz imkoniyatlarni beradi. Aytaylik, bizda ikkita jadval bor. Birida odamlar haqidagi 

ma'lumotlar, ikkinchisi esa ularning manzillarini o'z ichiga oladi. Bu juda mantiqiy vazifa, chunki 

insonning yashash joyining manzili o'zgarishi mumkin  va uning  ma'lumotlarini alohida jadvalda 

saqlash orqali biz insonning harakat tarixini saqlashimiz mumkin. 

Ma'lumotlarni olish so'rovi shunday ko'rinadi 

SELECT * 

FROM Peoples р, Address а 

WHERE idKey = idPeopleKey 

Bizning  formamiz  manzillarni  ko'rsatishi  uchun  ma'lumotlarni  o'qish  adapteridagi  so'rov 

qatorini o'zgartirish kifoya: 

SqlDataAdapter adapter = new SqlDataAdapter( 

"SELECT  *  FROM  Peoples  p,  Address  a  WHERE  idKey  =  idPeopleKey", 

connection); 

Siz misolni ishga tushirishingiz va manzil maydoni panjarada paydo bo'lishini tekshirishingiz 

mumkin. Kerakli ma'lumotlar namunasini olish uchun bizga murakkab tana harakatlari kerak emas 

edi.  Ma'lumotlar  o'zgarishlarini  hozir  qanday  saqlashim  mumkin?  Bir  vaqtning  o'zida  ikkita 

jadvalga  ma'lumotlarni  saqlashi  mumkin  bo'lgan  UPDATE  so'rovi  mavjud  emas.  Ammo  bizni 

ikkita  YANGILASH  so'rovini  yozishga  va  ularni  bitta  buyruqqa  qo'yishimizga  kim  to'sqinlik 

qilmoqda?  O'zgarishlarni  qabul  qiladigan  va  ularni  jadvallar  bo'ylab  tarqatadigan  protsedurani 

yozishimizga kim to'sqinlik qilmoqda? Mutlaqo hech kim aralasha olmaydi. Biz to'g'ridan-to'g'ri 

YANGILASH variantini ko'rib chiqamiz. 

Server bitta buyruqda bir vaqtning o'zida ikkita so'rovni bajara olishi uchun biz bu buyruqlarni 

nuqta-vergul yordamida ajratishimiz kerak. Bizning holatlarimizda u quyidagicha ko'rinadi: 



adapter.UpdateCommand = new SqlCommand( 

"UPDATE Peoples SET Фамилия = ?, Имя = ?, Пол = ? " + 

"WHERE idKey = ?;" + 

"UPDATE Address SET Адрес = ? " + 

"WHERE idAddressKey = ?" ) ; 

Endi  buyruqda  ikkita  yangilash  so'rovi  mavjud.  Birinchisi  Xalqlar  jadvalini,  ikkinchisi  esa 

Manzillar jadvalini yangilaydi. Misol ishlashi uchun siz Manzillar jadvalini yangilash so'rovi bilan 

bog'liq parametrlar to'plamiga ikkita parametr qo'shishni unutmasligingiz kerak: 

adapter.UpdateCommand.Parameters.Add("Адрес", 

SqlType.VarChar, 50, "Адрес"); 

adapter.UpdateCommand.Parameters.Add("idAddressKey", 

SqlType.Integer, 10, "idAddressKey"); 

Endi bitta o'tishda biz bir vaqtning o'zida ikkita jadvalni yangilashimiz mumkin. 

 

То,  что  у  нас  есть  контроль  над  запросами  изменения  данных,  предоставляет  нам 



неограниченные возможности над процессом сохранения данных. Допустим, что у нас есть 

две таблицы. В одной находятся данные о людях, а во второй таблице находятся их адреса. 

Вполне логичная задача, ведь адрес места жительства у человека может меняться, и за счет 

хранения  его  данных  в  отдельной  таблице  мы  можем  сохранять  историю  перемещения 

человека. 

Запрос на выборку данных будет выглядеть следующим образом 

SELECT * 

FROM Peoples р, Address а 

WHERE idKey = idPeopleKey 

Чтобы  наша  форма  отобразила  адреса,  достаточно  только  изменить  строку  запроса  в 

адаптере чтения данных: 

SqlDataAdapter adapter = new SqlDataAdapter( 

"SELECT  *  FROM  Peoples  p,  Address  a  WHERE  idKey  =  idPeopleKey", 

connection); 

Можете  запустить  пример  и  убедиться,  что  поле  адреса  появилось  в  сетке.  От  нас  не 

понадобилось  никаких  сложных  телодвижений  для  получения  необходимой  выборки 

данных. А как теперь сохранить изменения данных? Нет такого запроса 

UPDATE


, который 

мог  бы  сохранять  данные  сразу  в  две  таблицы.  Но  кто  мешает  нам  написать  два  запроса 

UPDATE И

 поместить их в одну команду? Кто мешает нам написать процедуру, которая будет 

получать изменения и разносить их по таблицам? Абсолютно никто не может помешать. Мы 

рассмотрим вариант с прямым выполнением UPDATE. 

Для того чтобы сервер смог выполнить сразу два запроса в одной команде, мы должны 

разделить эти команды с помощью точки с запятой. В нашем случае это будет выглядеть 

следующим образом: 

adapter.UpdateCommand = new SqlCommand( 

"UPDATE Peoples SET Фамилия = ?, Имя = ?, Пол = ? " + 

"WHERE idKey = ?;" + 

"UPDATE Address SET Адрес = ? " + 

"WHERE idAddressKey = ?" ) ; 

Теперь в команде два запроса обновления. Первый обновляет таблицу Peoples, а второй 

запрос обновляет таблицу  Address. Чтобы пример заработал, нужно не забыть добавить в 

коллекцию параметров два параметра, относящиеся к запросу обновления таблицы Address: 

adapter.UpdateCommand.Parameters.Add("Адрес", 

SqlType.VarChar, 50, "Адрес"); 

adapter.UpdateCommand.Parameters.Add("idAddressKey", 

SqlType.Integer, 10, "idAddressKey"); 

Теперь в один проход мы сможем обновить сразу две таблицы. 





Yüklə 0,6 Mb.

Dostları ilə paylaş:
1   2   3   4   5   6




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©azkurs.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin