मुझे SQL Server CLR में एक ट्रिगर c # कोड में एक तीसरी पार्टी DLL का उपयोग करने की आवश्यकता है
लेकिन जब मैं संदर्भ जोड़ने की कोशिश करता हूं तो यह SQL सर्वर से कुछ DLL दिखाता है।
मैं अपने तीसरे पक्ष को dll SQL सर्वर से कैसे जोड़ सकता हूं ?
मुझे SQL Server CLR में एक ट्रिगर c # कोड में एक तीसरी पार्टी DLL का उपयोग करने की आवश्यकता है
लेकिन जब मैं संदर्भ जोड़ने की कोशिश करता हूं तो यह SQL सर्वर से कुछ DLL दिखाता है।
मैं अपने तीसरे पक्ष को dll SQL सर्वर से कैसे जोड़ सकता हूं ?
जवाबों:
आप केवल उन असेंबली का संदर्भ जोड़ सकते हैं जो Sql सर्वर के साथ पंजीकृत हैं। यदि वे पंजीकृत नहीं हैं, तो वे ऐड रेफरेंस संवाद में दिखाई नहीं देंगे।
आपको DLL को पंजीकृत करने के लिए कई चरणों की आवश्यकता होगी, सबसे पहले आपको अपने डेटाबेस को फिर से कॉन्फ़िगर करना होगा:
ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;
एक बार यह पूरा हो जाने के बाद, Sql Server CLR सक्षम है। इसके बाद, आपको अपनी विधानसभा को पंजीकृत करना होगा:
CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE
यदि यह अंतिम स्क्रिप्ट सही तरीके से चलती है, तो असेंबली अब पंजीकृत है, और ऐड रेफरेंस संवाद में दिखाई देगी।
हालाँकि आपको इस पर विचार करने की आवश्यकता होगी कि क्या आपके Sql सर्वर CLR विन्यास की अनुप्रयोग सुरक्षा है:
SAFE
, केवल असाधारण परिस्थितियों में आपको उपयोग करना चाहिए EXTERNAL_ACCESS
या UNSAFE
।Assembly.Load()
कि उद्देश्यपूर्ण रूप से प्रतिबंधित है , विधानसभाओं को गतिशील रूप से प्रयास और लोड न करें ।UNSAFE
।context connection = true;
) से बना डेटाबेस एक्सेस जुड़े हुए उपयोगकर्ता के संदर्भ में चलता है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आप जानते हैं कि आपके डेटा के लिए लाइब्रेरी की क्या पहुँच है।मैं मान रहा हूँ कि आप Visual Studio से SQL CLR असेंबली स्थापित करने के विकल्पों के बारे में पूछ रहे हैं।
Visual Studio में कोड होने की आवश्यकता नहीं है।
MSDN पर CLR डेटाबेस ऑब्जेक्ट परिनियोजित करना SQL कथन और परिनियोजन स्क्रिप्ट सहित विकल्पों का विवरण देता है।
मैं एक बहुत बड़ी 3rd पार्टी DLL का उपयोग करता हूँ जो एक वेब पेज लेता है और इसे एक PDF में रूपांतरित करता है।
पीडीएफ एक फ़ाइल शेयर पर सहेजा जाता है और डेटाबेस को स्थान और प्रकार के अनुसार अपडेट किया जाता है।
यह एक 3-चरण प्रक्रिया है:
एक कंसोल ऐप बनाएँ जो पीडीएफ बनाने के लिए 3rd पार्टी DLL का उपयोग करता है और URL और FilePath को मापदंडों के रूप में स्वीकार करता है और पीडीएफ आकार और पृष्ठों की संख्या लौटाता है।
एक CLR संग्रहीत कार्यविधि बनाएँ जो सर्वर पर कंसोल ऐप को कॉल करती है
मैं यह सब एक एकल संग्रहित प्रक्रिया में लपेटता हूं जो पीडीएफ बनाने के लिए सीएलआर ऐप को कॉल करता है और फिर मैं इसके बारे में मेटा-डेटा को डेटाबेस में लिखता हूं।
मुझे लगता है कि यह सही नहीं है और किसी भी तरह से आपको ट्रिगर के अंदर इतना कुछ नहीं करना चाहिए!
मैं केवल दूसरों के लिए यहां उल्लेख करता हूं कि उनके सीएलआर में तीसरे पक्ष के डीएलएल का उपयोग करने के बारे में प्रश्न हैं।
मेरी आशा है कि 3rd पार्टी DLL को चलाने के लिए cmd.exe कंसोल को बंद करके, सब-इन को चलाने के बजाय, यदि यह क्रैश हो जाता है, तो यह SQL सर्वर पर उतना प्रतिकूल प्रभाव नहीं डालेगा। यही मैं उम्मीद करता हूं।
कृपया टिप्पणी करें कि क्या यह वास्तव में खराब दृष्टिकोण है और क्यों।