5. DataSet yordamida ma’lumotlarni o`qish. DataSet bilan jadval, ustun va satrlarga
murojaat.
DataSet va DataTable. Ma'lumotlar bazasidan SqlDataAdapter orqali DataSet-da ma'lumotlarni
olgandan so'ng, biz ulanishdan qat'i nazar, ushbu ma'lumotlar bilan mahalliy ravishda ishlashimiz
mumkin. Bundan tashqari, agar biz biron bir ma'lumotlar bazasidan foydalanishga hojat yo'q bo'lsa,
lekin ayni paytda jadvallar to'plami shaklida ma'lumotlar bilan ishlash uchun qulay funktsiyaga ega
bo'lishni istasak, unda biz DataSet klassidan ham foydalanishimiz mumkin.
DataSet ob'ekti DataTable turi bilan ta'minlangan jadvallarni o'z ichiga oladi. O'z navbatida,
jadval ustunlar va satrlardan iborat. Har bir ustun DataColumn ob'ekti, satr esa DataRow ob'ekti. Qator
ma'lumotlari ItemArray xususiyatida saqlanadi, bu ob'ektlarning qatorini - satrdagi alohida
hujayralarning qiymatlarini anglatadi. Masalan, biz barcha jadvallarni olamiz va ularning tarkibini
ko'rsatamiz:
static void Main(string[] args) {
string sql = "SELECT * FROM Users";
string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated
Security=True";
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);
DataSet ds = new DataSet();
adapter.Fill(ds);
// перебор всех таблиц
foreach (DataTable dt in ds.Tables) {
Console.WriteLine(dt.TableName); // Jadval nomlanishi
// перебор всех столбцов
foreach(DataColumn column in dt.Columns)
Console.Write("\t{0}", column.ColumnName);
Console.WriteLine();
// перебор всех строк таблицы
foreach (DataRow row in dt.Rows)
{
// получаем все ячейки строки
var cells = row.ItemArray;
foreach (object cell in cells)
Console.Write("\t{0}", cell);
Console.WriteLine();
}
}
}
}
Endi DataSet va DataTable ob'ektlari bilan qandaydir ma'lumotlar bazasini ishlatmasdan
qanday ishlashimiz mumkinligini ko'rib chiqamiz. Masalan, biz DataSet-da qo'lda bir nechta jadval
yaratamiz va ularning tarkibini aniqlaymiz:
static void Main(string[] args) {
DataSet bookStore = new DataSet("BookStore");
DataTable booksTable = new DataTable("Books");
// dataset ga jadval qo'shing
bookStore.Tables.Add(booksTable);
// Books jadvali uchun ustunlar yarating
DataColumn idColumn = new DataColumn("Id", Type.GetType("System.Int32"));
idColumn.Unique = true; // ustun noyob qiymatga ega bo'ladi
idColumn.AllowDBNull = false; // nullni qabul qila olmaydi
idColumn.AutoIncrement = true; // avtomatik kattalashtirish
idColumn.AutoIncrementSeed = 1; // boshlang'ich qiymati
idColumn.AutoIncrementStep = 1; // yangi satr qo'shishda o'sish.
DataColumn nameColumn = new DataColumn("Name", Type.GetType("System.String"));
DataColumn priceColumn = new DataColumn("Price", Type.GetType("System.Decimal"));
priceColumn.DefaultValue = 100; // standart qiymat
DataColumn discountColumn = new DataColumn("Discount", Type.GetType("System.Decimal"));
discountColumn.Expression = "Price * 0.2";
booksTable.Columns.Add(idColumn);
booksTable.Columns.Add(nameColumn);
booksTable.Columns.Add(priceColumn);
booksTable.Columns.Add(discountColumn);
// books jadvalining asosiy kalitini aniqlang
booksTable.PrimaryKey = new DataColumn[] { booksTable.Columns["Id"] };
DataRow row = booksTable.NewRow();
row.ItemArray = new object[] { null, "Война и мир", 200 };
booksTable.Rows.Add(row); // добавляем первую строку
booksTable.Rows.Add(new object[] { null, "Отцы и дети", 170 });
// ikkinchi qatorni qo'shing
Console.Write("\tИд \tНазвание \tЦена \tСкидка");
Console.WriteLine();
foreach (DataRow r in booksTable.Rows) {
foreach (var cell in r.ItemArray)
Console.Write("\t{0}", cell);
Console.WriteLine();
}
Console.Read();
}
Keling, barcha kodni tahlil qilaylik. Birinchidan, ma'lumotlar konstruktoriga berilgan DataSet
va DataTable ob'ektlari yaratiladi. Keyin to'rtta ustun yaratiladi. Konstruktordagi har bir ustun ikkita
parametrni oladi: ustun nomi va uning turi.
DataColumn idColumn = new DataColumn("Id", Type.GetType("System.Int32"));
Bundan tashqari, Id ustuni uchun, ushbu ustunning qiymatlari noyob qiymatga ega bo'lishi
kerakligi, nullni qabul qilmasligi kerakligi va yangi ob'ekt qo'shilganda ularning qiymati bittaga
ko'payishi aniqlandi. Ya'ni, aksariyat ma'lumotlar bazalarida bo'lgani kabi, bu standart Id ustunidir.
Keyinchalik, yana uchta ustun yaratiladi va Discount ustuni uchun Expression xususiyati ustun
qiymatini hisoblash uchun ishlatiladigan ifoda ko'rsatiladi:
discountColumn.Expression = "Price * 0.2";
Ya'ni, bu holda, chegirma ustunining qiymati 0,2 ga ko'paytirilgan Price ustunining qiymatiga
tengdir. Keyin, jadvalning boshlang'ich kaliti PrimaryKey xususiyati yordamida o'rnatiladi:
booksTable.PrimaryKey = new DataColumn[] { booksTable.Columns["Id"] };
Birlamchi kalit - bu Id ustunidir. Ammo biz kompozit kalitni yaratish uchun turli xil ustunlar
to'plamidan foydalanishimiz mumkin. Jadval sxemasini aniqlagandan so'ng unga ikkita qator qo'shiladi:
DataRow row = booksTable.NewRow();
row.ItemArray = new object[] { null, "Война и мир", 200 };
booksTable.Rows.Add(row); // добавляем первую строку
booksTable.Rows.Add(new object[] {null, "Отцы и дети", 170 });
BookTable.Rows.Add usulidagi qiymatlar to'g'ridan-to'g'ri ob'ektlar qatori yoki DataRow
ob'ekti sifatida uzatilishi mumkin. Bunday holda, biz ustunlar jadvalidagi kabi to'liq qiymatlarni
uzatishimiz kerak. Biroq, Idning birinchi ustuni avtomatik o'sish orqali o'rnatilgandan so'ng, biz nol
qiymatini berishimiz mumkin - u baribir e'tiborga olinmaydi. Shuningdek, Discount ustunining oxirgi
parametrini tashlab yuborish mumkin, chunki uning qiymati "Price * 0.2" ifodasi yordamida
hisoblanadi. Bundan tashqari, biz Price ning uchinchi ustuni uchun qiymatni qoldirib ketamiz, chunki
uda DefaultValue xususiyati mavjud, agar u hech qanday qiymat bo'lmasa, standart qiymatni belgilaydi:
booksTable.Rows.Add(new object[] {null, " Otalar va bolalar "});
Va oxirida, jadvalning satrlari bo'ylab takrorlanadi. Qo'shish bilan bir qatorda, biz boshqa
operatsiyalarni strings yordamida amalga oshirishimiz mumkin. Masalan, biz indeks bo'yicha qator
olishimiz mumkin:
DataRow row = booksTable.Rows[0]; //birinchi qator
Qatorlarni indeks bo'yicha olgandan so'ng, siz uning kataklarini o'zgartirishingiz mumkin:
booksTable.Rows [0] [2] = 300; // birinchi qatorning uchinchi katagi 300 ga o'rnatildi
Shuningdek, siz satrni o'chirishingiz mumkin:
booksTable.Rows.RemoveAt (1); // ikkinchi qatorni indeks bo'yicha o'chirish
// olib tashlashning boshqa usuli
DataRow row = booksTable.Rows [0];
booksTable.Rows.Remove (row);
DataTable-ning Select () usulidan foydalanib, biz ma'lum bir mezonga mos keladigan
qatorlarni osongina topamiz. Masalan, biz 120 dan oshadigan qatorlarni olamiz:
var selectedBooks = booksTable.Select("Price > 120");
foreach
(var b in
selectedBooks)
Console.WriteLine("{0} - {1}", b["Name"], b["Price"]);
Dostları ilə paylaş: |