2. Olingan natijalarning tavsifi.
Dasturning birinchi qismi SQL Serverning oldingi misoliga o‘xshaydi; bu yerda ulanish qatori yordamida ulanish obyekti yaratiladi:
SqlConnection thisConnection = new SqlConnection (
@"Data Source=.\SQLEXPRESS;"+
@"AttachDbFilename=’C:\SQL Server 2000 Sample Databases\NORTHWND.MDF’;" +
@"Integrated Security=True;Connect Timeout=30;User Instance=true" );
Keyin SqlAdapter obyekti quyidagi operator yordamida yaratiladi:
SqlDataAdapter thisAdapter = new SqlDataAdapter(
"SELECT CustomerlD, CompanyName FROM Customers", thisConnection);
Keyin ma’lumotlar bazasini yangilash uchun SQL operatorlarini to‘g‘ri yaratishingiz kerak. Buni o‘zingiz qilishingiz shart emas — ular SqlCommandBuilder tomonidan qo‘llab-quvvatlanadi:
SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);
Shuni esda tutingki, thisAdapter SqlCommandBuilder konstruktoriga argument sifatida beriladi. SqlCommandBuilder ob’ektini yaratishda SQL buyruqlari ishlab chiqariladi va uzatiladigan ma’lumotlar adapteri bilan bog‘lanadi. Biroz vaqt o‘tgach, bobda siz turli xil SQL operatorlarini va dasturning SQL ni to‘g‘ridan-to‘g‘ri qo‘llashini ko‘rasiz.
Endi ko‘rsatuvchi DataSet obyektini yaratasiz va uni ma’lumotlar bilan to‘ldirasiz:
DataSet thisDataSet = new DataSet();
thisAdapter.Fill(thisDataSet, "Customers");
Bunday holda, Customers jadvali kerak, shuning uchun DataSet da bir xil nom bilan bog‘langan DataTable ob’ektini chaqirasiz. To‘ldirilgan DataSet da siz alohida satr va ustunlarga murojaat qilishingiz mumkin.
Ma’lumotlarni o‘zgartirishdan oldin, ularning o‘zgarishdan oldin bo‘lgan shakli ko‘rsatiladi:
Console.WriteLine("название до изменения: {0}", thisDataSet.Tables["Customers"].Rows[9]["CompanyName"]);
Bu erda CompanyName ustunining qiymati Customers jadvalidagi 9- raqamli satrida chop etiladi. To‘liq chiqish qatori shunday ko‘rinadi:
название до изменения: Bottom-Dollar Markets
Bu yerda bir oz hiyla-nayrang bor, chunki u indeks raqami 9 bo‘lgan qatorni qiziqtirganligi ma’lum (bu aslida o‘ninchi qatorni ifodalaydi, chunki indekslanish noldan boshlanadi va birinchi qator — bu satr [0]). Haqiqiy dasturda, misollardan farqli o‘laroq, 9 raqamiga murojaat qilish o‘rniga qiziqish satrlarini tanlash uchun kvalifikatorni SQL so‘roviga qo‘yish kerak bo‘ladi. Quyidagi misol sizni qiziqtirgan satrlarni qanday topishni ko‘rsatadi.
Bu yerda nima sodir bo‘layotganini tushunishning yana bir usuli, har bir ob’ektni ifodalashda buzadigan ekvivalent misolni ko‘rib chiqishdir:
// Ko‘p narsalardan foydalanish misoli
DataTable customerTable = thisDataSet.Tables["Customers"];
DataRow rowTen = customerTable.Rows[9];
object CompanyName = rowTen["CompanyName"];
Console.WriteLine("название до изменения: {0}", CompanyName);
Ushbu misolda, customerTable DataTable deb e’lon qilinadi, thisDataSet ob’ektining Tables xususiyatiga Customers jadvali beriladi. Keyin rowTen DataRow deb e’lon qilinadi va unga customerTable ob’ekti Rows xususiyatining o‘ninchi elementi beriladi. Va nihoyat, CompanyName object deb e’lon qilinadi, undan keyin rowTen obyektining indexer xususiyati CompanyName maydonini belgilash uchun ishlatiladi.
Ushbu misol bog‘langan ob’ektlarning zanjirini kuzatish jarayonni tushunishga yordam beradi, lekin ko‘pincha bir xil natijaga olib keladigan bir satrli ifodani qo‘llash osonroq bo‘ladi:
Console.WriteLine("название до изменения: {0}", thisDataSet.Tables["Customers"].Rows[9]["CompanyName"]);
Agar bir nechta ob’ektni ishlatadigan kod yanada aniqroq bo‘lsa, shubhasiz, ushbu usuldan foydalaning. Bu mos yozuvlar har bir ob’ekt uchun o‘zgaruvchilarni yaratish va ularni har safar tayinlash samarasiz bo‘lishi mumkin; ammo, agar ob’ekt qayta foydalanish kerak bo‘lsa, ko‘p-ob’ektli metod yanada samarali bo‘lishi mumkin. Kompilyator optimallashtiruvchisi kodlash bilan bog‘liq har qanday samarasizlikni bartaraf etishi mumkin, shuning uchun siz uchun ko‘proq o‘qilishi mumkin bo‘lgan kodni qo‘llash odatiy holdir.
Misolga qaytamiz. O‘zgarishlarni amalga oshirishdan oldin ustunning qiymatini ko‘rsatdik, shuning uchun endi bu o‘zgarishni ustunga kiritaylik. DataColumn qiymatini o‘zgartirish uchun quyidagi misolda ko‘rsatilgandek uni yangi qiymat bilan belgilaymiz:
thisDataSet.Tables["Customers"].Rows[9]["CompanyName"] = "Acme, Inc.";
Bu qator CompanyName ustun qiymati bilan bir qatorda Customers jadvalining 9-indeksdagi qator qiymatini ham "Acme, Inc." ga o‘zgartiradi.
Ushbu o‘zgarish faqat DataSet ustunining qiymatini ma’lumotlar bazasida emas, balki xotirada saqlaydi.
DataSet, DataTable, DataRow va DataColumn obyektlari xotirada joylashgan jadval ma’lumotlarining ko‘rinishi. Ma’lumotlar bazasini yangilash uchun Update() metodini chaqirishingiz kerak.
Update() — bu ma’lumotlar adapteri ob’ektining metodi. Uni chaqirish uchun DataSet-ni ko‘rsating, uning asosida yangilanish bo‘lishi kerak va DataSet ni yangilash uchun DataTable nomini ko‘rsatish kerak. DataTable ("Custo15mers") nomi oldingi bu Fill metodi chaqiruvida ishlatilgan narsalarga mos kelishi muhimdir:
thisAdapter.Update(thisDataSet, "Customers");
Update() metodi ma’lumotlar bazasida amalga oshirilishi kerak bo‘lgan kerakli o‘zgarishlarni tekshirish orqali avtomatik ravishda DataTable liniyalaridan o‘tadi. Rows to‘plamidagi har bir DataRow obyekti RowState xususiyatiga ega, bu qator o‘chirilganda, qo‘shilganda, o‘zgartirilganda yoki o‘zgarishsiz qoldirilganda kuzatiladi. Unda amalga oshirilgan har qanday o‘zgarishlar ma’lumotlar bazasida aks ettiriladi.
Endi siz uni amalga oshirganingizdan so‘ng ma’lumotlarni chop etish orqali o‘zgarishlarni tasdiqlaysiz:
Console.WriteLine("название после изменения: {0}", thisDataSet.Tables["Customers"].Rows[9]["CompanyName"]);
Hammasi shu!
Biz bu yerda uchrashgan yangi tushunchalarni qisqacha umumlashtiramiz.
SqlCommandBuilder. SqlCommandBuilder obyekti ma’lumotlar bazasini yangilash uchun SQL operatorlarini qurishni qo‘llab-quvvatlaydi-ular o‘zlarini qurishga hojat yo‘q.
SqlDataAdapter. Update().Ushbu metod DataTable da ma’lumotlar bazasida amalga oshirilishi kerak bo‘lgan o‘zgarishlarni tekshirish orqali amalga oshiriladi. Rows to‘plamidagi har bir DataRow obyekti RowState xususiyatiga ega bo‘lib, qator o‘chirilganda, qo‘shilganda, o‘zgartirilganda yoki o‘zgarishsiz qoldirilganda kuzatiladi. Har qanday o‘zgarishlar ma’lumotlar bazasida aks ettiriladi.
Bularning barchasi, albatta, SQL Server ma’lumotlar manbai provayderining versiyalari, ammo shunga o‘xshash tarzda ishlaydigan OLE DB provayderining tegishli versiyalari mavjud.
Foydalanildi:
Карли Уотсон, Кристиан Нейгел, Якоб Хаммер Педерсен, Джон Д Рид, Морган Скиннер, Эрик Уайт. Visual C# 2008: базовый курс.: Пер. с англ. - М.: ООО "И.Д. Вильяме", 2009.-1216с.
Do'stlaringiz bilan baham: |