Listing 2.1. Tarmoqqa ma'lumot yuklanmoqda
void ReadData()
{
// serverga ulanish
OleDbCommand connection = CreateConnection();
// jamoani tayyorlang
OleDbCommand command = new OleDbCommand(“SELECT * FROM Peoples”);
command.Connection = connection;
// adapter va ma'lumotlar bazasini yaratish
OleDbDataAdapter adapter = new OleDbDataAdapter(command);
DataSet dataset = new DataSet();
// adapter ma'lumotlarini to‘ldiring.
adapter.Fill(dataset);
// biz endi kerak bo‘lmagan aloqani yoping
connection.Close();
// Ma'lumotlar bazasini o‘rta dasturiy ta'minot bindingSource bilan bog‘lang
dataGridView1.AutoGenerateColumns = true;
bindingSource.DataSource = dataset.Tables[0];
dataGridView1.DataSource = bindingSource;
}
Ma'lumotlar to‘plamini to‘ldirgandan so‘ng biz ulanishni yopamiz va DataSet ma'lumotlari bilan hech qanday muammosiz ishlaymiz. Ammo ma'lumotlarni panjara bilan biriktirishdan oldin, men ushbu panjara AutoGeneratecolumns xususiyatini haqiqiy holatga o‘zgartiraman. Ushbu standart xususiyat haqiqiy bo‘lishi kerak, lekin men uni qo‘lda o‘rnatdim. Agar bu xususiyat true ga sozlangan bo‘lsa, unda ustunlar avtomatik ravishda panjara ichida hosil bo‘ladi.
Endi shamchaning o‘ziga qaraylik. Birinchidan, BindingSource komponentasini DataSource xususiyatiga, jadvalda ma'lumotlari panjara ichida ko‘rinadigan jadvalga qo‘ying. Natijada bir nechta jadvallardan iborat bo‘lishi mumkin va bu jadvallar jadvallar to‘plamida mavjud. Bizda faqat bitta natijalar jadvali mavjud, shuning uchun biz to‘plamning nol elementini tanlaymiz:
bindingSource.DataSource = dataset.Table[0];
Endi DataSource xususiyatidagi mesh komponent bizning BindingSource majburiy komponentimiz tomonidan ko‘rsatilishi kerak.
Ilovani ishga tushiring va u ishlayotganiga ishonch hosil qiling. Server bilan hech qanday aloqa yo‘q, lekin biz ma'lumotlarni ko‘rishimiz, saralashimiz (buning uchun tartiblangan ustunning sarlavhasini bosishimiz kerak) va hatto ma'lumotlarni o‘zgartirishimiz mumkin. To‘g‘ri, ma'lumotlar o‘zgarishini saqlash uchun siz hali ham ushbu tejashni amalga oshiradigan kodni yozishingiz kerak.
Adapter DataAdapter.
4-Rejada Biz alohida ma'lumotlar bilan ishlaydigan bir nechta sinflarni tanishtirdik. Ma'lumot olishning muhim tarkibiy qismi bu DataAdapter klassidir (biz uning OleDbDaeaAdapter klassi bilan tanishmiz), bu bilan so‘rov natijalaridan ma'lumotlarni DataSet sinf ob'ektiga nusxalash va ma'lumotlar bilan lokal ravishda ishlash mumkin.
DataAdapter sinfi ma'lumotlar to‘plamidan keshlangan o‘zgarishlarni olish va ularni saqlash uchun bazaga qaytarish imkoniyatini beradi. Eng asosiysi, ma'lumotlarni yangilash mantig‘ini boshqarishingiz mumkin va bu ADO.NET-dan foydalanganda juda katta afzallik. ADO ning oldingi versiyasida o‘zgarishlarni saqlash mantig‘ini boshqarish imkoni bo‘lmadi. DataAdapeer adapteri InsertCommand, DeleteCommand va Updatecommand xususiyatlariga ega. yangi yozuvlarni kiritish, yo‘q qilish va yangilash mantiqiga javob beradi.
Bundan tashqari, ma'lumotlar bazasidan ma'lumotlarni olish mantig‘i uchun javob beradigan SelectCommand xususiyati mavjud, ya'ni u ma'lumotlar bazasidan ma'lumotlarni olish va bu natija bilan DataSet-ni to‘ldirish uchun bajariladigan buyruqni o‘z ichiga oladi.
Ammo birinchi navbatda birinchi narsa. DataAdapter sinfini batafsil ko‘rib chiqamiz, chunki bu ADO.NETning muhim qismi.
1.4.1. Konstruktor.
DataAdapter sinfida bir nechta ortiqcha konstruktorlar mavjud. Eng oddiy variant hech qanday parametrlarni olmaydi. Agar siz ushbu konvertorni ishlatsangiz, SelectCommand xususiyatida ma'lumotlarni tanlash uchun bajarilgan buyruqni aniq ko‘rsatishingiz va shuningdek, ushbu buyruq uchun server bilan ulanishni ko‘rsatishingiz kerak bo‘ladi.
Konstruktorning ikkinchi versiyasi OleDbConunand sinfiga tegishli ob'ektni oladi, unda allaqachon ma'lumotlar olish so‘rovi va sozlangan ulanish mavjud.
Uchinchi parametr parametrlar sifatida so‘rovlar satrini va ulanish ob'ektini oladi:
OleDbDataAdapter adapter = new OleDbDataAdapter(“SELECT * FROM Peoples”,connection);
Bunday holda siz so‘rov bilan buyruq ob'ektini aniq yaratishingiz shart emas, sizga kerak bo‘lgan hamma narsa konstruktor tomonidan yaratiladi va SelectCommand xususiyati bajarilayotgan so‘rovni o‘z ichiga oladi va belgilangan ulanish uchun sozlanadi.
Konstruktorning so‘nggi versiyasi hech qanday ob'ektni olmaydi, faqat ikkita satr. Birinchi satr ma'lumot olish uchun so‘rov, ikkinchi satr esa server bilan aloqa liniyasi.
1.4.2. So‘rov natijasi olinmoqda.
So‘rov natijasini olish va uni DataSet-ga nusxalash uchun Fill () usuli qo‘llaniladi. Ushbu usulda 7 ta ortiqcha yuklangan variant mavjud. U ma'lumotlarni nafaqat ma'lumotlar to‘plamiga, balki jadvalga (DataTable ob'ekti) ham yuklashi mumkin. Siz barcha ma'lumotlarni birdaniga yuklay olmaysiz, faqat uning bir qismi.
Eng qiziqarli variant, mening fikrimcha, to‘rtta parametrni oladigan usul:
Nusxalash uchun ma'lumotlar to‘plami.
Nusxa ko‘chirishni boshlashi kerak bo‘lgan chiziqning ko‘rsatkichi (chiziqlar indeksi noldan raqamlangan);
Nusxalanadigan yozuvlar soni;
Jadvalni xaritalashda ishlatiladigan manba jadvalining nomi.
Shunday qilib, butun natijani million qatordan ma'lumotlar to‘plamiga nusxalashning iloji yo‘q, faqat hozirda zarur bo‘lgan qatorlar. Masalan, quyidagi kod 100-dan boshlab 50 ta yozuvni nusxa ko‘chiradi:
DataAdapter.Fill(DataSet, 0 , 50 , “Peoples”);
Yodda tutingki, ikkinchi parametrda indekslar noldan raqamlanadi. Buni yaxshiroq ko‘rish uchun quyidagi kodga qarang:
DataAdapter.Fill(DataSet, 0 , 50 , “Peoples”);
Ushbu kodning bajarilishi natijasida 0dan 49gacha bo‘lgan 50 satr DataSet-ga ko‘chiriladi.
Qaytish qiymati sifatida Fill () usuli DataSet-ga ko‘chirilgan yozuvlar sonini o‘tkazadi.
1.4.3. Ma'lumotlar bazasida o‘zgarishlarni saqlash
Ma'lumotlar bazasida ma'lumotlarni ko‘rish yaxshi va qiziqarli, ammo o‘zgarishlarni tez-tez saqlash imkoniyati bu ma'lumotlarni ko‘rish nuqtasidir. UpdateCommand xususiyati ma'lumotlar bazasidagi ma'lumotlarni yangilash uchun javobgardir. Ushbu xususiyat aslida OleDbCommand sinfining ob'ekti hisoblanadi.
UpdateCommand xususiyati bilan ishlashning ma'nosi, biz ma'lumotlarni tanlagan SelectCommandga o‘xshaydi. UpdateCommand-da biz ma'lumotlarni yangilash uchun ishlatiladigan SQL so‘rovini yozishimiz kerak, parametrlar yordamida (parametrlar xossasi) ma'lumotlar bazasi ma'lumotlar bazasidan yangilanish so‘roviga qanday o‘tkazilishini ko‘rsatishimiz kerak. Va, albatta, buyruqlarni bajarish uchun ishlatiladigan ma'lumotlar bazasi ulanishini ko‘rsatishingiz kerak.Sekundagi bayonotda siz amalga oshirishingiz mumkin bo‘lgan juda qiziq bir xususiyat mavjud - namunalarni so‘rash va ma'lumotlarni yangilash uchun turli xil ulanishlar ishlatilishi mumkin. Bundan quyidagi maqsadlarda foydalanish mumkin:
turli xil qayd yozuvlari, agar ular to‘g‘ridan-to‘g‘ri kodingizda ro‘yxatdan o‘tgan bo‘lsa, ma'lumotlar bazasini tanlash va ulanish uchun ishlatilishi mumkin;
ma'lumotlarni qabul qilish bitta serverdan olinishi mumkin, boshqa serverda saqlash mumkin. Ushbu yondashuv ma'lumotlar marshrutlari va replikatsiyalar bilan ishlashda qulay bo‘lishi mumkin.
4-Rejada Ma'lumotni olish va uni panjara shaklida namoyish qilish misolini yozdik. Biz panjara ichidagi ma'lumotlarni tahrirlashimiz mumkin edi, ammo o‘zgarishlar saqlanmadi. Saqlash kodini yozaylik. Ushbu misolni oching va saqlaydigan tugmani qo‘shing. Ushbu tugmachani bosish uchun voqea ishlov beruvchisini yarating va unda Listing 2.2 tarkibini yozing.
|