BEGIN i END ifodasi orasida funksiya mazmuni joylashtiriladi. Bizning misolda WHERE operatori orqali Price ustuni qiymati @price dan kichik bo‘lgan yozuvlardan iborat. Endi ushbu funksiyani DBda shakllantiramiz. Buning uchun Update tugmasini bosamiz:
So‘ngra, hosil qilingan muloqot oynasidagi Update Database tugmasini bosamiz:
Shundan so‘ng, Database Explorer oynasidagi Functions qismini topib, yangi hosil qilingan funksiyamizni ko‘rishimiz mumkin. Endi biz ushbu funksiyani ishlatishimiz mumkin. Ushbu funksiyaga C# tilidan murojaat qilishdan avval, uning to‘g‘ri ishlashini tekshiruvdan o‘tkazamiz.
Buning uchun ushbu funksiya nomiga sichqonchaning o‘ng tugmasini bosamiz va hosil bo‘lgan menyudan Execute qismini tanlaymiz:
Shundan so‘ng, funksiyaning kiruvchi parametrlari qiymatini kiritish oynasi shakllantiriladi. Ushbu muloqot oynasidagi Value maydonga funksiyaning @price parametriga mos qiymatni kiritish lozim:
Shundan so‘ng, Visual Studio funksiya chaqirish skriptini generatsiya qiladi:
Yuqoridagi natijadan biz yaratgan funksiyaning to‘g‘ri ishlashini anglash mumkin. Endi ushbu funksiyaga C# kodidan murojaat qilamiz:
static void Main(string[] args)
{
using (PhoneContext db = new PhoneContext())
{
System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@price", 26000);
var phones = db.Database.SqlQuery("SELECT * FROM GetPhonesByPrice (@price)", param);
foreach (var phone in phones)
Console.WriteLine(phone.Name);
}
Console.ReadKey();
}
Ushbu dasturda SQL Server da joylashgan, PhoneContext ma’lumotlar kontekstiga mos DBdagi GetPhonesByPrice funksiyasi (@price) parametri orqali chaqirilgan.
Xuddi yuqoridagi tartibda chegirmaga mos narxni aniqlovchi funksiyani shakllantiramiz:
CREATE FUNCTION [dbo].[GetPriceWithDiscount]
(
@discount int
)
RETURNS @returntable TABLE
(
Name nvarchar(50),
Price decimal(8,3)
)
AS
BEGIN
INSERT @returntable
SELECT Name, Price - Price * @discount / 100
FROM Phones
RETURN
END
Ushbu funksiya parametr sifatida chegirma foizini (masalan, 10%) qabul qiladi. Natija sifatida esa ikkita maydondan iborat jadvalni qaytaradi. Ushbu maydonlar: model nomi va chegirma inobatga olingan narx.
Funksiya yangi Name va Price xususiyatlardan iborat ob’ekt qaytarganligi, shuningdek Price xususiyatning decimal tipiga mansubligi sababli C# tilida mos klassni shakllantiramiz:
class DiscountPhone
{
public string Name { get; set; }
public decimal Price { get; set; }
}
Endilikda funksiya natijasini quyidagicha olishimiz mumkin:
static void Main(string[] args)
{
using (PhoneContext db = new PhoneContext())
{
// 15% li chegirma
System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@discount", 15);
var phones = db.Database.SqlQuery("SELECT * FROM GetPriceWithDiscount (@discount)", param);
foreach (var p in phones)
Console.WriteLine("{0} - {1}", p.Name, p.Price);
}
Console.ReadKey();
}
Saqlanadigan protseduralar
DBda saqlanadigan protseduralar bilan ishlash foydalanuvchi funksiyalari kabi amalga oshiraladi. Avvalgi mavzuda ko‘rib chiqilgan DB ustida ish ko‘ramiz. Buning uchun Database Explorer oynasidagi mos DBga ulanamiz va tuzilmadan Stored Procedures (Xranimыe protsedurы) qismini tanlaymiz. Ushbu qism ustiga sichqonchaning o‘ng tugmasini bosamiz va taqdim qilingan menyudan Add New Stored Procedure qismni tanlaymiz:
Shundan so‘ng Visual Studio quyidagi protsedura kodini generatsiya qiladi:
CREATE PROCEDURE [dbo].[Procedure]
@param1 int = 0,
@param2 int
AS
SELECT @param1, @param2
RETURN 0
Ushbu kodni quyidagicha o‘zgartirib olamiz:
CREATE PROCEDURE [dbo].[GetPhonesByCompany]
@name nvarchar(50)
AS
SELECT * FROM Phones
WHERE CompanyId=(SELECT Id FROM Companies WHERE Name=@name)
GO
Ushbu protsedura @name parametr ga teng bo‘lgan telefon kompaniyalari nomiga teng bo‘lgan satrlarni topib bo‘ladi.
Shundan so‘ng, saqlanadigan protsedurani xotiraga saqlash uchun Update tugmasini bosamiz:
Shundan so‘ng hosil qilingan oynadan Update Database tugmasini bosish lozim:
Shundan so‘ng, Stored Procedures qismda yangi protsedura hosil qilinadi. Ushbu protsedurani ishlatishdan avval uning to‘g‘ri ishlashini tekshiramiz. Buning uchun protsedura nomi ustiga sichqonchaning o‘ng tugmasini bosib, taklif qilingan menyudan Execute qismni tanlaymiz:
Shundan so‘ng kiruvchi parametri mavjud bo‘lgan oyna taqdim etiladi. Ushbu oynadagi Value maydoniga biror qiymatni kiritamiz va OK tugmasini bosamiz:
Shundan so‘ng Visual Studio avtomatik tarzda SQL tilida mos skriptni generatsiya qiladi va protseduranit kiritilgan parametr orqali ishga tushiradi:
Xuddi yuqorida keltirilgan tartibda GetPhonesPrice saqlanuvchi protsedurasini yaratamiz:
CREATE PROCEDURE [dbo].[GetPhonesPrice]
@bprice int, @eprice int
AS
SELECT * FROM Phones
WHERE Price BETWEEN @bprice and @eprice
Endi C# tili ushbu protsedura bilan ishlashni ko‘rib chiqamiz:
static void Main(string[] args)
{
using (PhoneContext db = new PhoneContext())
{
// Kompaniya nomiga mos telefonlar markalarini aniklash
System.Data.SqlClient.SqlParameter param = new System.Data.SqlClient.SqlParameter("@name", "Samsung");
var phones = db.Database.SqlQuery("GetPhonesByCompany @name", param);
foreach (var p in phones)
Console.WriteLine("{0} - {1}", p.Name, p.Price);
// Narxi 20000 va 35000 rubl orasida bulgan telefon markalarini aniklash
System.Data.SqlClient.SqlParameter param1 = new System.Data.SqlClient.SqlParameter("@bprice", "20000");
System.Data.SqlClient.SqlParameter param2 = new System.Data.SqlClient.SqlParameter("@eprice", "50000");
var phones1 = db.Database.SqlQuery("GetPhonesPrice @bprice, @eprice", param1, param2);
foreach (var p in phones1)
Console.WriteLine("{0} - {1}", p.Name, p.Price);
}
Console.ReadKey();
}
Dostları ilə paylaş: |