SQL सर्वर में Excel तालिका से डेटा प्राप्त करने से आसान क्या हो सकता है?
इस कार्य को पूरा करने के कई तरीके हैं। आप एकीकरण सेवाओं का उपयोग कर सकते हैं (पूर्व DTS) या आयात और निर्यात जादूगर, जो हुड के नीचे समान है। दूसरा तरीका है एक आसान ADO.NET ऐप . बनाना . आप लिंक किए गए सर्वर . का उपयोग कर सकते हैं तंत्र, जो आपको किसी भी ODBC / OLE DB-पहुंच योग्य वस्तु को तालिका (तालिकाओं का एक संग्रह) या किसी तदर्थ क्वेरी के परिणाम के रूप में देखने की अनुमति देता है।
यह तब तक था जब तक 64-बिट आर्किटेक्चर हाई-एंड क्लास से कुछ नहीं होना बंद हो गया और डेवलपर और उपयोगकर्ता लैपटॉप में आ गया। एक सामान्य उपयोगकर्ता द्वारा डेटाबेस सर्वर स्थापित करने की संभावना नहीं है, जबकि एक डेवलपर के लिए 32-बिट एमएस ऑफिस वाली 64-बिट मशीन पर 64-बिट SQL सर्वर होना सामान्य है। हालाँकि, इस मामले में, SQL सर्वर लिंक्ड सर्वर के साथ एक्सेल या एक्सेस का उपयोग करना एक चुनौती हो सकती है क्योंकि ड्राइवर 32-बिट हैं। एमएस ऑफिस के लिए कोई प्रदाता उपलब्ध नहीं है, हालांकि मैंने अपने पीसी पर एक स्थापित किया है।
इस प्रकार, दस्तावेज़ में वर्णित अनुसार SQL सर्वर से जुड़े सर्वरों के साथ एक्सेल या एक्सेस का उपयोग करने का प्रयास निम्न त्रुटि का कारण बनेगा:
संदेश 7302, स्तर 16, राज्य 1, पंक्ति 1
लिंक किए गए सर्वर के लिए OLE DB प्रदाता «Microsoft.ACE.OLEDB.12.0» का उदाहरण नहीं बना सकता…
तो, क्या करें?
64-बिट प्रदाता स्थापित करें, जो माइक्रोसॉफ्ट एक्सेस डेटाबेस इंजन 2010 पुनर्वितरण योग्य पर डाउनलोड के लिए उपलब्ध है। स्थापना प्रक्रिया के दौरान हमें निम्न त्रुटि मिलती है:
यदि कंप्यूटर पर 32-बिट कार्यालय स्थापित नहीं होता, तो आपको यह चेतावनी नहीं मिलती।
क्या मुझे एमएस ऑफिस के 64-बिट या 32-बिट संस्करण और SQL सर्वर के 64-बिट या 32-बिट संस्करण के बीच चयन करना चाहिए? एक संस्करण को अनइंस्टॉल करना और दूसरे को स्थापित करना एक लचीला समाधान नहीं है। इसके अलावा, यह हमेशा संभव नहीं होता है। आइए एक नजर डालते हैं उस सवाल पर जिसे किसी व्यक्ति ने MSDN पर उठाया है:
एमएस एक्सेस डेटाबेस ग्राहक साइट पर एक उत्पादन वातावरण है, और यह मेरे लिए इसे डी-इंस्टॉल करने और 64 बिट संस्करण स्थापित करने का विकल्प नहीं है। यह मौजूदा SQL सर्वर 64 बिट को डी-इंस्टॉल करने और 32 बिट संस्करण को स्थापित करने का विकल्प भी नहीं है। SQL सर्वर 32 बिट्स की एक अतिरिक्त स्थापना, केवल एमएस एक्सेस के लिए लिंक प्रदान करना ही एकमात्र विकल्प होगा। मुझे यह बहुत भयानक लगता है।
मुझे यह हिस्सा समझ नहीं आ रहा है।
चूंकि 64-बिट जेट नहीं है, आपको «माइक्रोसॉफ्ट एक्सेस डेटाबेस इंजन 2010 पुनर्वितरण योग्य» के 64-बिट संस्करण को डाउनलोड और इंस्टॉल करने की आवश्यकता है। - आपके उत्तर के लिए धन्यवाद, लेकिन जब मैं AccessDatabaseEngine_X64.exe स्थापित करता हूं तो मुझे निम्न त्रुटि मिलती है (चित्र 1) — कृपया इस KB आलेख को देखें: support.microsoft.com/kb/2269468 — आपके अंतिम संदेश के लिंक का आलेख सभी Office 32 बिट उत्पादों को डी-इंस्टॉल करने के लिए कहता है। मेरे लिए इसका कोई मतलब नहीं है, क्योंकि लक्ष्य 32 बिट एमएस एक्सेस डेटाबेस से जुड़ना है… — SQL सर्वर से एक्सेस फ़ाइल (32-बिट या 64-बिट) से कनेक्ट करने के लिए आपको "Microsoft ACE OLEDB Provider" का 64-बिट संस्करण इंस्टॉल करना होगा। — लेकिन मैंने 64 बिट ड्राइवर स्थापित करने का प्रयास किया, लेकिन यह मुझे एक स्थापना त्रुटि दे रहा है... — पिछला KB आलेख कारण बताता है और समाधान प्रदान करता है, आप इसका संदर्भ ले सकते हैं। - आप मंडलियों में मेरा मार्गदर्शन कर रहे हैं।
खैर, मुद्दा यह है कि Microsoft ACE OLEDB प्रदाता के 64-बिट संस्करण को 32-बिट कार्यालय के साथ काम करना है। सीधे तौर पर ऐसा करना क्यों संभव नहीं है यह एक बड़ा सवाल है। इस विषय पर बहुत सारी जानकारी है:
तथ्य यह है कि वे हमें हमारे आवेदन के दो अलग-अलग संस्करणों को संकलित करने के लिए मजबूर नहीं कर सकते हैं; एक विशेष रूप से x86 प्लेटफॉर्म के लिए और एक x64 प्लेटफॉर्म के लिए। फिर हमें किसी तरह यह निर्धारित करना होगा कि ACE ड्राइवर का कौन सा संस्करण स्थापित है ताकि हम जान सकें कि हमारे एप्लिकेशन का कौन सा संस्करण (32 या 64 बिट) स्थापित करना है। जीवन बहुत आसान होगा यदि हम अपने ऐप को डिफ़ॉल्ट AnyCPU के लिए संकलित कर सकते हैं और फिर 32 और 64 दोनों डेटा प्रदाताओं को स्थापित करने की अनुमति दी गई थी ... 32 और 64 बिट ACE एक साथ क्यों नहीं हो सकते? — यह इस तथ्य पर आधारित है कि Microsoft 32 और 64-बिट Microsoft Office 2010 या उनके आश्रित घटकों की साथ-साथ स्थापना का समर्थन नहीं करता... — मुझे खेद है, लेकिन यह प्रश्न का बहुत उपयोगी उत्तर नहीं है। प्रश्न:Microsoft Access डेटाबेस इंजन 2010 पुनर्वितरण योग्य (AccessDatabaseEngine.exe और AccessDatabaseEngine_X64.exe) के 32 और 64 बिट संस्करण दोनों को एक ही मशीन पर क्यों स्थापित नहीं किया जा सकता है? ए:माइक्रोसॉफ्ट 32 और 64-बिट माइक्रोसॉफ्ट ऑफिस 2010 के साथ-साथ इंस्टॉल का समर्थन नहीं करता है। यह जवाब नहीं दे रहा है, यह सिर्फ दूसरे शब्दों में सवाल दोहरा रहा है। प्रश्न:मैं ऐसा क्यों नहीं कर सकता? ए:क्योंकि हम इसका समर्थन नहीं करते हैं। प्रश्न:आप इसका समर्थन क्यों नहीं कर सकते? उ:क्योंकि हम इसका समर्थन नहीं करते हैं।
वर्कअराउंड के रूप में, मैंने /passive कुंजी के साथ AccessDatabaseEngine_X64.exe का उपयोग किया जो प्रदाता के 64-बिट संस्करण को 32-बिट कार्यालय संस्करण के साथ सह-अस्तित्व की अनुमति देता है। यह ध्यान दिया जाना चाहिए कि Microsoft आधिकारिक तौर पर इस पद्धति का समर्थन नहीं करता है। इसके अलावा, संगतता के साथ संभावित समस्याओं के संबंध में चेतावनियां भी हैं।
जब मैंने ड्राइवर स्थापित किया AccessDatabaseEngine_x64.exe … MS Office Pro Plus एक MS कॉन्फ़िगरेशन प्रक्रिया शुरू करता है जिसमें किसी दस्तावेज़ या Office प्रोग्राम के खुलने में एक या दो मिनट तक का समय लग सकता है . यदि कार्यालय 2010 32 बिट स्थापित है और यदि 64-बिट ऐस/पैसिव के साथ स्थापित है , फिर **हर** जब आप Access 2010 चलाते हैं, तो आपको एक स्वचालित इंस्टॉलेशन रूटीन मिलता है जो कार्यालय के लिए 32-बिट ड्राइवरों पर रीसेट हो जाता है ।
मेरे मामले में (ऑफिस 2013 प्रो प्लस, एसक्यूएल सर्वर 2012 डेवलपर एड।, विंडोज 8.1), कोई दृश्यमान समस्या नहीं थी (लकड़ी पर दस्तक)। फिर भी, मैं यह जोड़ना चाहूंगा कि यह यथावत है और बिना किसी दायित्व के है।
AccessDatabaseEngine_x64.exe डाउनलोड करें, सिस्टम पुनर्स्थापना बिंदु बनाएं (ऐसा लगता है कि यह Office घटकों को अपडेट करते समय स्वचालित रूप से बनाया गया है) और कमांड लाइन से चलाएं। यहां संभावित कुंजियां दी गई हैं:
चित्र 2 के विपरीत, स्थापना चल रही है
फिर, प्रदाता शॉर्टकट मेनू पर ताज़ा करें क्लिक करें:
मैंने बहुत जल्दी एक साधारण xslx फ़ाइल बनाई:
SQL सर्वर में, इस एक्सेल पर एक लिंक्ड सर्वर बनाएँ:
यदि मौजूद है (sys.servers से 1 चुनें जहां नाम ='XlsLnkSrv') exec sp_dropserver @server ='XlsLnkSrv', @droplogins ='droplogins'exec sp_addlinkedserver @server ='XlsLnkSrv', @srvproduct ='ACE 12.0' , @provider ='Microsoft.ACE.OLEDB.12.0', @datasrc ='C:\Temp\Sample.xlsx', @provstr ='Excel 12.0; एचडीआर=हां'
स्क्रिप्ट 1
पढ़ें:
ओपनक्वेरी से * चुनें (XlsLnkSrv, '[Sheet1$]' से * चुनें)
स्क्रिप्ट 2
क्या यह सफल है? नहीं!
Msg 7399, Level 16, State 1, Line 1
OLE DB प्रदाता «Microsoft.ACE.OLEDB.12.0» लिंक किए गए सर्वर «XlsLnkSrv» के लिए एक त्रुटि की सूचना दी। प्रदाता ने त्रुटि के बारे में कोई जानकारी नहीं दी है। लिंक किया गया सर्वर «XlsLnkSrv»।
फिर भी, यह सफल है!
इसी तरह,
openrowset('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=C:\Temp\Sample.xlsx;HDR=Yes', 'Select * from [Sheet1$]') से * चुनें पूर्व>सबसे पहले, हमें निम्नलिखित करने की आवश्यकता है:
exec sp_configure 'उन्नत विकल्प दिखाएं', 1;reconfigure;exec sp_configure 'Ad Hoc Distributed queries', 1;reconfigureस्क्रिप्ट 3
अंत में, मैं यह नोट करना चाहूंगा कि 64-बिट प्रदाता ने 32-बिट वाले को बदल दिया। यदि हम डीटीएस पैकेज के डेटा प्रवाह में नमूना.एक्सएसएलएक्स के लिए एक कनेक्शन बनाते हैं, तो हमें माइक्रोसॉफ्ट ऑफिस 12.0 एक्सेस डेटाबेस इंजन ओएलई डीबी प्रदाता की प्रारंभिक विफलता मिलेगी, जो तार्किक रूप से सही है, क्योंकि devenv.exe 32-बिट है, जबकि प्रदाता 64-बिट है। व्यवहार को पुनर्स्थापित करने के लिए, 32-बिट कार्यालय प्रदाता (यहां) को पुनर्स्थापित करना आवश्यक है। हालाँकि, इस मामले में, हम लिंक किए गए सर्वर का उपयोग नहीं कर सकते। लिंक किए गए सर्वर को काम करने के लिए, लेख की शुरुआत में जाएं।