DataSet yordamida malumotlarni o‘qish. DataSet bilan jadval, ustun va satrlarga murojat


SqlCommandBuilder va Ma'lumotlar bazasida DataSet o'zgarishlarini saqlash



Download 53,46 Kb.
bet2/2
Sana30.12.2021
Hajmi53,46 Kb.
#90382
1   2
Bog'liq
DataSet yordamida malumotlarni o‘qish. DataSet bilan jadval, ustun va satrlarga murojat.

SqlCommandBuilder va Ma'lumotlar bazasida DataSet o'zgarishlarini saqlash

DataSet-dagi ma'lumotlarni qabul qilib, biz u bilan turli xil operatsiyalarni bajarishimiz mumkin: o'chirish, o'zgartirish, yangi yozuvlarni qo'shish. Biroq, biz kiritgan barcha o'zgarishlar avtomatik ravishda ma'lumotlar bazasiga saqlanmaydi. Buning uchun biz hali ham DataSet-ni to'ldirgan SqlDataAdapter ob'ektining Update usulini chaqirishimiz kerak.

SqlDataAdapter ma'lumotlar bazasidagi ma'lumotlarni DataSetdagi o'zgarishlarga muvofiq o'zgartirish uchun InsertCommand, UpdateCommand va DeleteCommand buyruqlaridan foydalanadi. Ushbu buyruqlar uchun sql iboralarini o'zimiz belgilay olamiz yoki kerakli iboralarni avtomatik ravishda yaratish uchun SqlCommandBuilder sinfidan foydalanishimiz mumkin. SqlCommandBuilder-dan foydalanish:

static string connectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=usersdb;Integrated Security=True";

static void Main(string[] args)

{

    string sql = "SELECT * FROM Users";



    using (SqlConnection connection = new SqlConnection(connectionString))

    {


        connection.Open();

        SqlDataAdapter adapter = new SqlDataAdapter(sql, connection);

        DataSet ds = new DataSet();

        adapter.Fill(ds);

         DataTable dt = ds.Tables[0];

        // добавим новую строку

        DataRow newRow = dt.NewRow();

        newRow["Name"] = "Alice";

        newRow["Age"] = 24;

        dt.Rows.Add(newRow);

         // создаем объект SqlCommandBuilder

        SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);

        adapter.Update(ds);

        // альтернативный способ - обновление только одной таблицы

        //adapter.Update(dt);

        // заново получаем данные из бд

        // очищаем полностью DataSet

        ds.Clear();

        // перезагружаем данные

        adapter.Fill(ds);

         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();

        }

    }

    Console.Read();



}

Bu erda, ma'lumotlarni yuklagandan so'ng, yangi qator yaratiladi, keyin u DataTable-ga qo'shiladi. Adapterning Update () usuli chaqirilganda, sodir bo'lgan o'zgarishlar tahlil qilinadi. Va bundan keyin tegishli buyruq bajariladi. Bunday holda, yangi satr qo'shilayotganligi sababli, InsertCommand buyrug'i bajariladi. Biroq, ushbu kodda biz ushbu buyruqni aniq biron bir joyda o'rnatmaganmiz; SqlCommandBuilder biz uchun hamma narsani avtomatik ravishda amalga oshiradi. Ushbu sinfdan foydalanish uchun kerakli adapter o'tkazilgan uning konstruktorini chaqirish kifoya:



1

SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);

Kodning boshqa hech bir joyida siz ushbu ob'ektni chaqirmaysiz.

Agar kerak bo'lsa, ishlatilgan buyruqlarning sql ifodalarini olishimiz mumkin:



1

2

3



Console.WriteLine(commandBuilder.GetUpdateCommand().CommandText);

Console.WriteLine(commandBuilder.GetInsertCommand().CommandText);

Console.WriteLine(commandBuilder.GetDeleteCommand().CommandText);


Mening vaziyatimda yangilash buyrug'i quyidagicha ko'rinadi:

UPDATE [Users] SET [Name]=@p1, [Age]=@p2 WHERE (([Id]=@p3) AND ([Name]=@p4) AND ([Age]=@p5))

Qo'shish buyrug'i:

1

INSERT INTO [Users] ([Name],[Age]) VALUES (@p1, @p2)

Buyruqni o'chirish:

DELETE FROM [Users] WHERE (([Id]=@p1) AND ([Name]=@p2) AND ([Age]=@p3))

Ma'lumotlar bazasini DataSet-dan qo'lda yangilash

Garchi oldingi mavzuda SqlCommandBuilder ob'ekti ma'lumotlar bazasidagi ma'lumotlarni DataSet-dan yangilash uchun barcha kerakli iboralarni avtomatik ravishda yaratishga imkon bergan bo'lsa-da, bu usul hanuzgacha o'z kamchiliklariga ega. Masalan, oldingi satrda ishlatilgan quyidagi kod qismini ko'rib chiqing:

SqlCommandBuilder commandBuilder = new SqlCommandBuilder(adapter);

adapter.Update(ds);

ds.Clear();

adapter.Fill(ds);

Yangilanishdan so'ng DataSet o'chiriladi va ma'lumotlar qayta yuklanadi, bu dasturning ishlashini pasaytiradi. Biz DataTable-ga yangi ma'lumotlar qo'shilgan qatorni qo'shgan bo'lsak-da, unga faqatgina id - ma'lumotlar bazasi qo'shilganda hosil bo'ladigan qiymat etishmaydi. Id bo'lmasa, ma'lumotlarni boshqarish biz uchun qiyin bo'ladi, ularni o'sha SqlCommandBuilder orqali avtomatik ravishda yangilay olmaymiz yoki o'chira olmaymiz. Shuning uchun, ideal holda, biz ma'lumotlarni qayta yuklashdan saqlanishni va shu bilan birga adapter.Update usulini ishga tushirishda yangi yozuvning identifikatorini olishni xohlaymiz. Va yanada moslashuvchan usul - biz o'zimiz bajaradigan barcha iboralarni qo'lda belgilaymiz.

Shunday qilib, ma'lumotlar bazasiga quyidagi saqlangan protsedurani qo'shamiz:

CREATE PROCEDURE [dbo].[sp_CreateUser]

    @name nvarchar(50),

    @age int,

    @Id int out

AS

    INSERT INTO Users (Name, Age)



    VALUES (@name, @age)

  

    SET @Id=SCOPE_IDENTITY()



GO

Bu foydalanuvchi nomi va yoshini kirish parametrlari sifatida qabul qiladi va ularning identifikatorini qaytaradi.

Endi oldingi mavzudagi kodni o'zgartiramiz:

statik string connectionString = @ "Ma'lumotlar manbai =. \ SQLEXPRESS; Dastlabki katalog = usersdb; Integrated Security = True";

statik bo'sh joy Asosiy (string [] arglar)

{

string sql = "Foydalanuvchilardan * tanlang";



yordamida (SqlConnection ulanishi = yangi SqlConnection (connectionString))

{

ulanish.Ochiq ();



SqlDataAdapter adapter = yangi SqlDataAdapter (sql, ulanish);

SqlCommandBuilder commandBuilder = yangi SqlCommandBuilder (adapter);

// kiritish uchun buyruqni o'rnating

adapter.InsertCommand = yangi SqlCommand ("sp_CreateUser", ulanish);

// bu ishlaydigan protsedura bo'ladi

adapter.InsertCommand.CommandType = CommandType.StoredProcedure;

// ism uchun parametr qo'shing

adapter.InsertCommand.Parameters.Add (yangi SqlParameter ("@ name", SqlDbType.NVarChar, 50, "Ism"));

// yoshga parametr qo'shish

adapter.InsertCommand.Parameters.Add (yangi SqlParameter ("@ age", SqlDbType.Int, 0, "Age"));

// id uchun chiqish parametrini qo'shing

SqlParameter parametri = adapter.InsertCommand.Parameters.Add ("@ Id", SqlDbType.Int, 0, "Id");

parameter.Direction = ParameterDirection.Output;

DataSet ds = yangi DataSet ();

adapter.Fill (ds);

DataTable dt = ds.Tables [0];

// yangi qator qo'shish

DataRow newRow = dt.NewRow ();

newRow ["Name"] = "Kris";

newRow ["Yosh"] = 26;

dt.Rows.Add (newRow);

adapter. Yangilash (ds);

ds.AcceptChanges ();

foreach (DataColumn ustunidagi dt.Columns)

Console.Write ("\ t {0}", column.ColumnName);

Console.WriteLine ();

// jadvalning barcha qatorlari bo'ylab takrorlang

oldingi (DataRow qatori dt.Rows-da)

{

// qatordagi barcha katakchalarni oling



var cells = qator.ItemArray;

foreach (hujayralardagi ob'ekt katakchasi)

Console.Write ("\ t {0}", katak);

Console.WriteLine ();

}

}

Console.Read ();



}

Bu SqlCommandBuilder-dan ham foydalanadi, lekin endi adapter.InsertCommand xususiyatini bekor qilish orqali yangi ob'ekt qo'shilishi bekor qilinadi.



Chiqish parametrini belgilashda biz unga "@Id" deb nom berilishini va DataTable-da Id ustuni uchun qiymatni qaytarishini aniqlaymiz:

1

adapter.InsertCommand.Parameters.Add("@Id", SqlDbType.Int, 0, "Id");

Natijada, adapter.Update () usuli bajarilganda id avtomatik ravishda DataTable-ga o'tadi. Bunday holda, yangilash va o'chirish operatsiyalari, biz SqlCommandBuilder tomonidan taqdim etilganlardan foydalanamiz.

Ma'lumotlar bazasini DataSet-ning AcceptChanges () usuli yordamida yangilagandan so'ng, DataSet-dagi barcha o'zgarishlar barcha o'zgartirilgan qatorlarga bog'liq.
Download 53,46 Kb.

Do'stlaringiz bilan baham:
1   2




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