Ifoda asosida ustunlar yarating.
Ma'lumotlar bazasini yaratishda siz unga mavjud ma'lumotlardan olinadigan qiymatlarni qo'ymasligingiz kerak. Ilgari "Turlar" jadvalini o'z ichiga olgan BDTur_firm.mdb ma'lumotlar bazasi yaratilgan. Ushbu jadvalda ekskursiyalar narxini ko'rsatadigan "narx" maydoni mavjud. Amalda sizga turli xil valyutalarda ko'rsatilgan narx qiymati, soliqni hisobga olgan holda qiymat, diskontlangan qiymat va boshqalar kerak bo'lishi mumkin. Har bir aniq holat uchun siz ma'lumotlar bazasining o'ziga kiritmasdan qo'shimcha maydon (hisoblash) olishingiz mumkin.
ADO.NET texnologiyasi Expression asosidagi DataColumn ob’yektlarini yaratishga imkon beradi. Keling, yangi Windows dasturini yarataylik.
Forma kodiga nomlar maydonini kiritamiz: using System.Data.OleDb;
Forma sinfida biz CommandText va ConnectionString qatorlarini aniqlaymiz:
string commandText = "SELECT Информация, [Код тура], Название, Цена FROM Туры";
string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
@”D:\ВМИ\For ADO\BDTur_firm.mdb";
Forma yaratuvchisida biz "Tours" jadvalini DataGridView boshqaruvida aks ettirish uchun barcha ob’yektlarni dasturiy ravishda yaratamiz:
public Form1() {
InitializeComponent();
OleDbConnection conn = new OleDbConnection(connectionString);
OleDbCommand myCommand = new OleDbCommand();
myCommand.Connection = conn;
myCommand.CommandText = commandText;
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
dataAdapter. SelectCommand = myCommand;
DataSet dsTours = new DataSet();
DataTable dtTours = dsTours.Tables.Add("Turlar");
DataColumn ddDtour = dtTours.Columns.Add("Tur kodi", typeof(Int32));
ddDtour.Unique = true;
DataColumn dcName = dtTours.Columns.Add("Nomlanishi");
DataColumn dcPrice = dtTours.Columns.Add("Цена", typeof(Decimal));
DataColumn dcInformation = dtTours.Columns.Add("Ma’lumot");
conn.Open();
dataAdapter.Fill(dsTours.Tables["Туры"]);
conn.Close();
dataGridl.DataSource = dsTours.Tables["Туры"].DefaultView;
}
Ilovani ishga tushiramiz (3-rasm).
3-rasm. "Turlar" jadvalining tarkibini namoyish etish
DataColumn dcPrice = dtTours.Columns.Add ("Narx", typeof (Decimal));
DataColumn dcPriceNDS = dtTours.Columns.Add ("QQS bilan narx", typeof (Decimal));
dcPriceNDS.Expression = "Narx * 0,15 + Narx";
DataColumn dcPricewithDiscount = dtTours.Columns.Add ("Chegirma narxi", typeof (Decimal));
dcPricewithDiscount.Expression = "Narx-narx * 0.10";
...
Yaratilgan DataColumn ob'ektining Expression xususiyati belgilangan maydonning barcha qiymatlari uchun ifodalarni o'rnatadi (4-rasm).
4-rasm. Qiymatga asoslangan maydonlarni dasturiy yaratish.
Expression xususiyati, shuningdek, agregat funktsiyalarini, mag'lubiyatni birlashtirishni va ota-ona va bola jadvallari havolalarini qo'llab-quvvatlaydi.
Ma'lumotlar bazasidagi o'zgarishlarni kuzatib borish
DataSet va DataTable ob’yektlari qayta yuklangan GetChanges usulini quyidagi konstruktor bilan ta'minlaydi (5-rasm).
5-rasm GetChanges usuli
GetChanges usuli yangi DataSet yoki DataTable-ni asl ob'ektning tuzilishi bilan qaytaradi, lekin asl ob'ektdan faqat o'zgartirilgan yozuvlarni o'z ichiga oladi. 5-rasmda asl ob'ektlar myDataSet (A) va myDataTable (B), GetChanges usuli bilan yaratilgan yangilari newDataSet (A) va newDataTable (B). DataRowState sanash qiymatidan parametr sifatida foydalanib, siz ma'lum bir holatga ega bo'lgan yozuvlarni olishingiz mumkin, masalan, faqat o'chirilgan (Deleted) yoki qo'shilgan (Added).
Ma'lumotlar bazasiga o'zgartirishlar kiritishda GetChanges usuli chaqiruvi natijasida DataSet-ni yuborish trafikni kamaytiradi. Darhaqiqat, faqatgina kiritilgan o'zgarishlarni yuborish, boshqa barcha narsalar teng bo'lgan holda, to'liq DataSet-ni yuborishdan ko'ra kamroq resurslarni talab qiladi. Bu, ayniqsa, katta hajmdagi ma'lumotlar yoki ko'plab ulanishlar bilan ishlashda muhim ahamiyat kasb etadi.
GetChanges usuli shuningdek ma'lumotlarning ta'sirlanganligini ko'rsatadigan signalizatsiya bayrog'i sifatida ishlatiladi. Bunday tekshiruvni, masalan, quyidagi kod yordamida amalga oshirishingiz mumkin:
private void Form1_Closing (ob1ject sender, System.ComponentModel.CancelEventArgs e) {
DataSet ds = dataSet11.GetChanges ();
if (ds == null) return;
if (MessageBox.Show ("Ma'lumotlar bazasidagi o'zgarishlarni saqlamoqchimisiz?", "O'chirish", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
DataAdapter1.Update (ds);
}
Do'stlaringiz bilan baham: |