Kengaytirilgan saqlangan protseduralar qanday ishlaydi.
Mijoz ilovasi kengaytirilgan saqlangan protsedurani chaqirganda, so'rov TDS formatida Net-Libraries va Open Data Service orqali MS SQL SERVER yadrosiga uzatiladi.
SQL Sever kengaytirilgan saqlangan protsedura nomi bilan bog'liq DLL kutubxonasini topadi va agar u ilgari yuklanmagan bo'lsa, uni kontekstiga yuklaydi va dll ichida funksiya sifatida amalga oshirilgan kengaytirilgan saqlangan protsedurani chaqiradi.
Kengaytirilgan saqlangan protsedura serverda kerakli amallarni bajaradi va natija to'plamini ODS API tomonidan taqdim etilgan xizmat yordamida mijoz ilovasiga uzatadi.
Kengaytirilgan saqlangan protseduralarning xususiyatlari.
Kengaytirilgan saqlangan protseduralar MS SQL Serverning manzil maydonida va MS SQL Server xizmati ishlayotgan hisobning xavfsizlik kontekstida bajariladigan funksiyalardir;
Kengaytirilgan saqlangan protsedura dll xotiraga yuklangandan so'ng, u SQL Server to'xtatilgunga qadar yoki administrator uni buyruq yordamida uni tushirishga majburlamaguncha qoladi:
DBCC DLL_name (BEPUL).
Kengaytirilgan saqlangan protsedura odatdagi saqlanadigan protsedura bilan bir xil tarzda amalga oshiriladi:
xp_extendedProcName @ param1, @ param2 OUTPUT ISHLATISH
@ param1 kirish parametri
@ param2 kirish / chiqish parametri
Diqqat!
Kengaytirilgan saqlangan protseduralar MS SQL Server xizmat ko'rsatish jarayonining manzil maydonida bajarilganligi sababli, har qanday tanqidiy xatolar Ularning ishida yuzaga keladigan holatlar server yadrosiga zarar etkazishi mumkin, shuning uchun DLL-ni ishlaydigan serverga o'rnatishdan oldin uni yaxshilab sinab ko'rish tavsiya etiladi.
Kengaytirilgan saqlangan protseduralarni yaratish.
Kengaytirilgan saqlangan protsedura ushbu funktsiya quyidagi prototipga ega:
SRVRETCODE xp_extendedProcName (SRVPROC * pSrvProc);
Parametr pSrvProc har bir aniq mijoz ulanishi uchun tutqich bo'lgan SRVPROC tuzilishiga ko'rsatgich. Ushbu tuzilmadagi maydonlar hujjatlashtirilmagan va ODS kutubxonasi server ilovasi (Ochiq ma'lumotlar) o'rtasidagi aloqa va ma'lumotlarni boshqarish uchun foydalanadigan ma'lumotlarni o'z ichiga oladi. Xizmatlar serveri ilova) va mijoz. Har qanday holatda, siz ushbu tuzilishga murojaat qilishingiz shart emas va bundan tashqari, uni o'zgartira olmaysiz. Ushbu parametr har qanday ODS API funksiyasini chaqirganda ko'rsatilishi kerak, shuning uchun men kelajakda uning tavsifiga to'xtalmayman.
Xp_ prefiksidan foydalanish ixtiyoriy, ammo kengaytirilgan saqlangan protsedura nomini oddiy saqlanadigan protseduradan farqini ta'kidlaydigan tarzda boshlash uchun konventsiya mavjud, ularning nomlari, siz bilganingizdek, boshlanadi. sp_ prefiksi bilan.
Bundan tashqari, kengaytirilgan saqlangan protsedura nomlari katta-kichik harflarga sezgir ekanligini unutmang. Kengaytirilgan saqlangan protseduraga qo'ng'iroq qilganingizda bu haqda unutmang, aks holda kutilgan natija o'rniga siz xato xabarini olasiz.
Agar siz dll-ni ishga tushirish / deinitializatsiya kodini yozishingiz kerak bo'lsa, buning uchun standart DllMain () funktsiyasidan foydalaning. Agar sizda bunday ehtiyoj bo'lmasa va siz DLLMain () yozishni xohlamasangiz, unda kompilyator hech narsa qilmaydigan, faqat TRUE qaytaradigan DLLMain () funktsiyasining o'z versiyasini yaratadi. dll dan chaqirilgan barcha funktsiyalar (ya'ni kengaytirilgan saqlangan protseduralar) eksport qilingan deb e'lon qilinishi kerak. Agar siz MS Visual C++ da yozsangiz, direktivadan foydalaning __declspec (dllexport)... Agar kompilyatoringiz ushbu direktivani qo'llab-quvvatlamasa, DEF faylining EXPORTS bo'limida eksport qilingan funksiyani tavsiflang.
Shunday qilib, loyiha yaratish uchun bizga quyidagi fayllar kerak bo'ladi:
Srv.h sarlavha fayli, ODS API funksiyalari va makroslarning tavsiflarini o'z ichiga oladi;
Opends60.lib Opends60.dll kutubxonasi uchun import fayli boʻlib, ODS API tomonidan taqdim etilgan toʻliq xizmatni amalga oshiradi.
Microsoft kengaytirilgan saqlangan protseduralarni amalga oshiradigan barcha DLL-larni ushbu funktsiyani eksport qilishni qat'iy tavsiya qiladi:
Declspec (dllexport) ULONG __GetXpVersion ()
{
ODS_VERSIONni qaytarish;
}
MS SQL Server kengaytirilgan saqlangan protseduraga ega DLL ni yuklaganda, u birinchi navbatda foydalanilayotgan kutubxona versiyasi haqida ma'lumot olish uchun ushbu funktsiyani chaqiradi.
Birinchi kengaytirilgan saqlangan protsedurani yozish uchun kompyuteringizga o'rnatishingiz kerak:
Har qanday nashrning MS SQL Server 2000 (menda shaxsiy nashr bor). O'rnatish jarayonida manba namunasi variantini tanlashni unutmang
- MS Visual C ++ (men 7.0 versiyasini ishlatganman), lekin 6.0 ishlashini aniq bilaman
DLL faylingizni sinab ko'rish va disk raskadrovka qilish uchun SQL Server -a ni o'rnatish kerak. Tarmoq orqali nosozliklarni tuzatish ham mumkin, lekin men buni hech qachon qilmaganman va shuning uchun hamma narsani mahalliy diskimga o'rnatdim. Microsoft Visual C ++ 7.0 Interprise Edition kengaytirilgan saqlangan protsedura DLL ustasini o'z ichiga oladi. Asosan, u tabiiydan tashqari hech narsa qilmaydi, faqat kengaytirilgan saqlangan protsedura uchun shablonni yaratadi. Agar sizga sehrgar yoqsa, undan foydalanishingiz mumkin. Men hamma narsani qalam bilan qilishni afzal ko'raman, shuning uchun men bu ishni ko'rib chiqmayman.
Endi gapga:
- Visual C ++ dasturini ishga tushiring va yangi loyiha yarating - Win32 Dynamic Link Library.
- Sarlavha faylini loyihaga qo'shing - #include ;
- Asboblar => Variantlar menyusiga o'ting va qidiruv yo'llarini qo'shing va kutubxona fayllari... Agar MS SQL Serverni o'rnatish paytida siz hech narsani o'zgartirmagan bo'lsangiz, quyidagilarni o'rnating:
C: Dastur fayllari Microsoft SQL Server 80ToolsDevToolsInclude sarlavhali fayllar uchun;
- C: Dastur fayllari kutubxona fayllari uchun Microsoft SQL Server 80ToolsDevToolsLib.
- Bog'lovchi parametrlarida opends60.lib kutubxona fayli nomini belgilang.
Bu tayyorgarlik bosqichini yakunlaydi, siz birinchi kengaytirilgan saqlangan protsedurani yozishni boshlashingiz mumkin.
Muammoni shakllantirish.
Dasturlashni boshlashdan oldin, siz qaerdan boshlashingiz, yakuniy natija qanday bo'lishi kerakligi va unga qanday erishishingiz haqida aniq tasavvurga ega bo'lishingiz kerak. Shunday qilib, biz uchun texnik vazifa:
Qabul qiluvchi MS SQL Server 2000 uchun kengaytirilgan saqlangan protsedurani ishlab chiqing to'liq ro'yxat domenda ro'yxatdan o'tgan foydalanuvchilar va uni mijozga shaklda qaytaradi standart to'plam rekordlar (rekordlar to'plami). Birinchi kirish parametri sifatida funktsiya katalog ma'lumotlar bazasini (Active Directory) o'z ichiga olgan server nomini, ya'ni domen boshqaruvchisi nomini oladi. Agar bu parametr NULL bo'lsa, u holda ro'yxat mijozga uzatilishi kerak mahalliy guruhlar... Ikkinchi parametr kengaytirilgan saqlangan protsedura tomonidan muvaffaqiyatli / muvaffaqiyatsiz natija qiymatini qaytarish uchun ishlatiladi (OUTPUT parametri). Agar kengaytirilgan saqlangan protsedura muvaffaqiyatli bo'lsa, mijozning yozuvlar to'plamiga qaytarilgan yozuvlar sonini o'tkazish kerak, agar ish paytida kerakli ma'lumotlarni olishning iloji bo'lmasa, ikkinchi parametrning qiymati -1 ga o'rnatilishi kerak. , muvaffaqiyatsiz yakunlanish belgisi sifatida.
Kengaytirilgan saqlangan protseduraning shartli prototipi quyidagicha:
xp_GetUserList (@NameServer varchar, @CountRec int OUTPUT);
Va biz tarkib bilan to'ldirishimiz kerak bo'lgan kengaytirilgan saqlangan protsedura shablonidir:
#o'z ichiga oladi
#o'z ichiga oladi
#XP_NOERROR 0 ni aniqlang
#XP_XATOSI -1ni aniqlang
__declspec (dllexport) SERVRETCODE xp_GetGroupList (SRVPROC * pSrvProc)
{
// O'tkazilgan parametrlar sonini tekshirish
// O'tkazilgan parametrlar turini tekshirish
// 2-parametr OUTPUT parametri ekanligini tekshiring
// Parametr 2 qiymatni saqlash uchun etarlicha uzunligini tekshiring
// Kirish parametrlarini oling
// Foydalanuvchilar ro'yxatini oling
// Qabul qilingan ma'lumotlarni mijozga standart yozuvlar to'plami sifatida yuboring
// OUTPUT parametrining qiymatini o'rnating
qaytish (XP_NOERROR);
}
Do'stlaringiz bilan baham: |