Berilganlar bazasi ado. Net ulanish satri Ma’lumotlar bazasiga ulanish


Ro'yxat 16.2. Ma'lumotlar to'plamini o'qish usuli



Download 379,38 Kb.
bet12/18
Sana08.01.2022
Hajmi379,38 Kb.
#331084
1   ...   8   9   10   11   12   13   14   15   ...   18
Bog'liq
ADO.NET texnologiyasi(Uzbek)

Ro'yxat 16.2. Ma'lumotlar to'plamini o'qish usuli

void ReadData()

{

// ulanishni ishga tushirish

OleDbConnection connection = CreateConnection();

// создать команду запроса

OleDbCommand command = connection.CreateCommand();

command.CommandText = "SELECT * FROM Peoples";

// so'rovni bajarish

OleDbDataReader reader = command.ExecuteReader();

// ma'lumotlarni o'qish qismi

while (reader.Read())

{

ListViewItem item =

listView1.Items.Add(reader["Familiya"].ToString());

item.SubItems.Add(reader.GetValue(2).ToString());

item.SubItems.Add(reader.GetValue(3).ToString());

item.SubItems.Add(reader.GetValue(4).ToString());

}

connection.Close();

}
Misolni sinab ko'rish uchun men rasmda ko'rsatilgandek dastur yaratildi. 16.4.

Bunday holda, biz ma'lumotlar bazasi serverida biz allaqachon tanish bo'lgan tarzda buyruqlarni bajarish uchun ulanish va ob'ektni yaratamiz. Eng qizig'i, biz bu buyruqni qanday chaqiramiz va natijani qanday qayta ishlaymiz. Ma'lumotlar to'plamini olish uchun ExecuteReader() usuli yordamida SQL buyrug'ini bajarish kerakligini aytdim. Natijada OleDbDataReader ob'ektini qaytaradi, bu orqali biz natija ma'lumotlarini o'qiymiz.



Rasm. 16.4. Ish natijasi bilan ilova shakli

Natija ma'lumotlarining keyingi qatorini olish uchun siz OleDbDataReader sinfining Read() usulini chaqirishingiz kerak. Bu usul mantiqiy qiymatni qaytaradi, bu keyingi satr o'qilganligini aniqlaydi. Agar biz ma'lumotlar to'plamining oxiriga yetgan bo'lsak, u holda usul chaqiruvining natijasi noto'g'ri bo'ladi.

Read() usulidan foydalanib, biz to'plamning qatorlari bo'ylab harakat qilamiz. Ustun qiymatini qanday olasiz? Buning uchun kerakli ustun nomini ko'rsatgan holda ob'ekt indeksatoriga murojaat qilishingiz mumkin. Masalan, familiyali ustunni olish uchun siz o'quvchi ["Familiya"] ni yozasiz. Kvadrat qavs ichida satr sifatida bizga kerak bo'lgan ustun nomini ko'rsatamiz va uning qiymatini Ob'ekt sifatida olamiz. Bu usul yaxshi, ammo samarali emas. Gap shundaki, natijalar to‘plamida kerakli maydonni topish uchun har safar maydonni uning nomi bo‘yicha qidirish kerak bo‘ladi. Bu dastur uchun juda qimmat, ayniqsa kodingizdagi nomlar bo'yicha maydonlarga juda ko'p qo'ng'iroqlar bo'lsa.

Nom bo'yicha ma'lumotlarni olish o'rniga, ustun indeksiga murojaat qilishingiz mumkin. Bu usul tezroq ishlaydi va OleDbDataReader-da indeks bo'yicha ma'lumot olishning ko'plab usullari mavjud, ammo ular ham kamchiliklardan xoli emas, biz ularni biroz keyinroq ko'rib chiqamiz.

Keling, indeks bo'yicha ma'lumot olishning qanday usullari mavjudligini ko'rib chiqaylik. Ustun qiymatlarini GetValue() usuli yordamida ham olish mumkin. Ushbu usul sizni qiziqtirgan ustun indeksini o'tkazishi kerak. Bu usul avvalgi misolda ham qo'llaniladi. Indeksator orqali faqat familiyani olaman. Boshqa barcha ustun qiymatlari GetValue() usuli orqali olaman.

Agar o'zingizning massivlaringiz bilan ishlash sizga qulayroq bo'lsa yoki bunday ehtiyoj bo'lsa, GetValues ​​() usulidan foydalanishingiz mumkin. Ushbu usul natija qiymatlarining mazmunini ob'ektlar qatoriga ko'chiradi. Usulni parametr sifatida ishga tushirilgan massivdan o'tkazish kerak. Massiv qiymatlari soni olingan maydonlar bilan bir xil bo'lishi kerak. Bu mumkin va kamroq, bu xatolikka olib kelmaydi. U massivda qancha qiymatlar bo'lsa, shuncha maydonni to'ldiradi. Natijadagi maydonlar sonini FieldCount xususiyati orqali topish mumkin. Quyidagi misol ushbu usuldan qanday foydalanishni ko'rsatadi:

Object[] row = new Object[reader.FieldCount];

reader.GetValues(row);

Kodning birinchi qatori natijalarni saqlash uchun ob'ektlar qatorini ishga tushiradi va ikkinchi qatorda GetValues ​​() usuli qo'llaniladi. Natijada, usul ko'chirilgan maydonlar sonini qaytaradi.

Ammo umumiy ob'ekt sifatida ma'lumotlar bilan ishlash har doim ham qulay emas. Masalan, bizning holatimizda uchinchi maydon sana hisoblanadi va shunchaki sana obyektini ToString() usuli yordamida satrga aylantirish har doim ham yaxshi yechim emas. Va agar siz ushbu sana bilan xuddi sana bilan ishlashingiz kerak bo'lsa? Muammo juda oddiy hal qilinadi - ma'lum bir ma'lumot turidagi ma'lumotlarni qaytaradigan maxsus usullardan foydalanishingiz kerak. Masalan, sana sifatida qiymat olish uchun GetDateTime() usulidan foydalanishingiz mumkin:

reader.GetDateTime(3)

Keling, qiymatlarni olishning yana qanday usullari mavjudligini ko'rib chiqaylik. Barcha usullar parametr sifatida qaytariladigan maydon indeksini oladi:

GetBoolean() — maydon qiymatini mantiqiy qiymat sifatida qaytaradi;

GetByte() — maydon qiymatini bayt sifatida qaytaradi;

GetChar() — maydon qiymatini belgi sifatida qaytaradi;

GetDecimal() — maydon qiymatini O'nlik son sifatida qaytaradi;

GetDouble() — maydon qiymatini suzuvchi nuqta raqami sifatida qaytaradi;

GetString() — maydon qiymatini satr sifatida qaytaradi.

Bu barcha usullar emas. Deyarli har bir ma'lumot turi uchun ularning ko'pi bor va ularning barchasi GetDataType() ko'rinishiga ega.

Maydonga indeks bo'yicha murojaat qilishning asosiy kamchiligi moslashuvchanlikni yo'qotishdir. Agar siz so'rovdagi maydonlar ketma-ketligini o'zgartirishga yoki so'rovdan maydonni olib tashlashga qaror qilsangiz, kodni tuzatishingiz kerak bo'ladi. Jadvalning tuzilishini o'zgartirishda ham muammolar paydo bo'lishi mumkin. Masalan, 16.2 ro'yxatdagi kod yulduzcha (SELECT *) yordamida jadvaldagi barcha maydonlarni tanlaydi. Jadvalning tuzilishini o'zgartirsangiz, so'rov ma'lumotlarni noto'g'ri tartibda qaytarishi mumkin va indeks chaqiruvi dasturni buzadi. Ma'lumotlarning to'g'riligi xavf ostida bo'ladi.

Ma'lumotlar strukturasini o'zgartirish yoki jadvaldagi so'rovlarni o'zgartirish jiddiy muammolarga olib kelishi mumkin. Ma'lum bo'lishicha, biz qiymatlarga - maydon nomlari yoki indekslariga kirish uchun nimadan foydalanishni tanlashga duch keldik. Birinchi holda, biz ishlashda yutqazamiz, lekin biz moslashuvchanlikni qo'lga kiritamiz va ikkinchi holatda, aksincha.

Darhaqiqat, men sizga hali ham maydonlarga nom bilan murojaat qilishingizni tavsiya qilaman. Tezlikdagi yo'qotish unchalik katta emas, shuning uchun bu muammoni e'tiborsiz qoldirish mumkin. Siz o'rta joyni topishga harakat qilishingiz yoki optimallashtirish usullaridan foydalanishingiz mumkin. Misol uchun, agar bitta maydonga bir nechta qo'ng'iroqlar bo'lsa, siz eng boshida maydon indeksini uning nomi bilan aniqlashingiz va keyin indeksga murojaat qilishingiz mumkin. Ustun indeksini nomi bo'yicha aniqlash uchun siz parametr sifatida satrni qabul qiladigan va raqamli indeksni qaytaradigan GetOrdinal() usulidan foydalanishingiz mumkin. Masalan:

int nameIndex = reader.GetOrdinal("Ism");

reader.GetValue(nameIndex);

Birinchi qatorda biz indeksni aniqlaymiz, so'ngra olingan indeks bo'yicha qiymatga xohlaganimizcha kirishimiz mumkin. Bunday kod eng ko'p qirrali va ishlashda ko'p narsani yo'qotmaydi. Maydon indeksini aniqlash looplarda yaxshi ishlaydi. Masalan:

OleDbDataReader reader = command.ExecuteReader();

int lastnameIndex = reader.GetOrdinal("Ism");

// Bu yerda boshqa sohalar indekslarini aniqlash mumkin

while (reader.Read())

{

ListViewItem item =



listView1.Items.Add(reader.GetValue(lastnameIndex).ToString());

// bu yerda boshqa maydonlardan foydalanayotgan bo'lishi mumkin

}


Download 379,38 Kb.

Do'stlaringiz bilan baham:
1   ...   8   9   10   11   12   13   14   15   ...   18




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish