2008-09-03 19 views
5

मेरे पास कुछ कोड है जो उपलब्ध SQL सर्वर और डेटाबेस की सूची पॉप्युलेट करने के लिए एसएमओ का उपयोग करता है। जबकि हम अब SQL Server 2000 का समर्थन नहीं करते हैं, यह संभव है कि कोड उस मशीन पर चलाया जा सके जो SQL Server 2000 है और SMO लाइब्रेरी स्थापित नहीं है। मैं पहले एसएमओ की जांच करना चाहूंगा और उपयोगकर्ता के चेहरे में उड़ने की बजाए कार्यक्षमता को गहराई से घटा दूंगा। यह पता लगाने का सबसे अच्छा तरीका क्या है कि एसएमओ मशीन पर उपलब्ध है या नहीं?एसएमओ की उपस्थिति का पता लगाने का सबसे अच्छा तरीका क्या है?

एक त्वरित Google स्कैन के माध्यम से मैंने जो भी उदाहरण देखा है, वह "सी: \ प्रोग्राम फ़ाइलें \ Microsoft SQL Server \ 90 \ SDK \ Assemblies \ Microsoft.SqlServer.Smo.dll" की एक भिन्नता थी। उस दृष्टिकोण के साथ समस्या यह है कि यह केवल SQL Server 2005 के साथ काम करता है। यदि SQL Server 2008 एकमात्र SQL सर्वर स्थापित है तो पथ अलग होगा।

+1

एक संबंधित प्रश्न: क्या आपको 2005 और 2008 के साथ एक ही कोड काम करने का मुद्दा सामना करना पड़ा है। यदि हां, तो आपने इसे कैसे हल किया? – Mostlyharmless

उत्तर

3

यह तरह का घबराहट है, लेकिन रजिस्ट्री की त्वरित जांच काम करने लगती है। HKEY_CLASSES_ROOT के तहत, एसएमओ असेंबली से बड़ी संख्या में कक्षाएं पंजीकृत की जाएंगी। मुझे बस इतना करना था कि एसएमओ कक्षाओं में से एक को चुनना और उसी नाम के साथ कुंजी के अस्तित्व की जांच करना था। यदि एसएमओ स्थापित किया गया है, तो अन्यथा गलत होने पर निम्न कार्य सत्य वापस आ जाएगा।

private bool CheckForSmo() 
{ 
    string RegKeyName = @"Microsoft.SqlServer.Management.Smo.Database"; 
    bool result = false; 
    Microsoft.Win32.RegistryKey hkcr = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(RegKeyName); 
    result = hkcr != null; 

    if (hkcr != null) 
    { 
     hkcr.Close(); 
    } 

    return result; 
} 
3

मैं कुछ एसएमओ ऑब्जेक्ट का उदाहरण बनाने का प्रयास करता हूं। अगर यह विफल रहता है, तो वहां नहीं है।

6

मैंने SQL2008 R2 फीचर पैक से SharedManagementObjects.msi पर एक नज़र डाली थी और मेरी विंडोज रजिस्ट्री (SQL2008 R2 देव इस मशीन पर स्थापित है) और मेरा मानना ​​है कि ये reg कुंजी हैं जिन्हें एसएमओ का पता लगाने के लिए उपयोग करना चाहिए (सभी के तहत एचकेएलएम):

सॉफ़्टवेयर \ माइक्रोसॉफ्ट \ माइक्रोसॉफ्ट एसक्यूएल सर्वर \ साझा मैनेजमेंट ऑब्जेक्ट्स \ CurrentVersion - यह स्पष्ट रूप से मुख्य कुंजी है, जो दर्शाता है कि एसएमओ का कुछ संस्करण स्थापित है।

सॉफ़्टवेयर \ Microsoft \ Microsoft SQL Server 2008 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion - इसका शायद एक अर्थ है 2008 अंग्रेजी स्थापित है। शायद सॉफ़्टवेयर की उपस्थिति की जांच \ Microsoft \ Microsoft SQL Server 2008 Redist \ SharedManagementObjects पर्याप्त होगा।

ही SQL2012 पर लागू होता है: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2012 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

नहीं बल्कि SQL2005! भले ही मेरे पास इस मशीन पर भी 2005 स्थापित है।

एक और बात, आप सामान्य रूप से माइक्रोसॉफ्ट एसक्यूएल सर्वर सिस्टम सीएलआर प्रकार चाहते हैं, क्योंकि एसएमओ उन पर निर्भर करता है। SQLSysClrTypes.msi केवल एक रजिस्ट्री कुंजी है: SOFTWARE \ Microsoft \ Microsoft SQL सर्वर \ refcount \ SQLSysClrTypes

+0

पुनर्वितरण योग्य सीएलआर प्रकारों के साथ, रजिस्ट्री कुंजी 'HKLM \ सॉफ़्टवेयर \ Microsoft \ Microsoft SQL Server 2008 Redist \ SQL सर्वर सिस्टम CLR प्रकार' प्रतीत होती है। जो जानकारी आप जांचना चाहें (जैसे संस्करण) उपकुंजियों में है। – jpmc26

1

एसक्यूएल सर्वर 2012 के लिए समाधान:

HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\SharedManagementObjects\CurrentVersion\Version 

आप देख सकते हैं इस कुंजी मौजूद रहने पर (और जांच यदि मान 11 से अधिक है)।

0

बस एक त्वरित नोट: HKLM \ सॉफ़्टवेयर \ Microsoft \ Microsoft SQL Server \ SharedManagementObjects \ CurrentVersion \ Version स्थापित मौजूदा संस्करण का प्रतिनिधित्व नहीं करता है, क्योंकि कई संस्करण स्थापित हो सकते हैं।

उपरोक्त रजिस्ट्री कुंजी को एक संस्करण स्थापित करते समय अद्यतन किया जा रहा है, इसलिए यदि आपने एसएमओ 2014 स्थापित किया है तो आपको 12.x देखना चाहिए, लेकिन यदि बाद में आप एसएमओ 2012 स्थापित करते हैं, तो यह संस्करण 11 हो जाएगा।एक्स आप तो 2014 installtion की मरम्मत करने का फैसला करता है, तो संस्करण होगा फिर 12.x

बेहतर होगा कि तुम पर दिखना चाहिए: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server 2012 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

या HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL सर्वर 2014 Redist \ SharedManagementObjects \ 1033 \ CurrentVersion

कोई जानता है 1033 की गारंटी है करता है? (मतलब केवल अंग्रेजी संस्करण)

+0

हाय, मैंने इसका परीक्षण किया है, और यह गारंटी नहीं है कि यह 1033 है (यह एसएमओ पर निर्भर करता है जो स्थापित किया जा रहा है)। – Saragani

संबंधित मुद्दे

 संबंधित मुद्दे