2009-09-26 16 views
18

पर पंजीकृत नहीं है मेरे पास एक NANT- आधारित स्क्रिप्ट है जो मैं अपने स्थानीय पीसी पर चलाता हूं जो SQL सर्वर 2008 एक्सप्रेस से कनेक्ट होता है जो मेरे स्थानीय पीसी पर चलने और डेटाबेस को फिर से बनाने के लिए चलाता है। एसक्यूएल फाइलें - यह ठीक काम करती है, यहां कोई समस्या नहीं है।'SQLNCLI' प्रदाता स्थानीय मशीन

समस्या आता है जब मैं एक और पीसी पर एक ही सेट-अप से निर्मित है, मुझे लगता है कि यह कहते हुए मेरी NAnt स्क्रिप्ट में त्रुटि मिलती है:

System.InvalidOperationException: The 'SQLNCLI' provider is not registered on the local machine. 
    at System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper) 
    at System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection) 
    at System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject) 
    at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 
    at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 
    at System.Data.OleDb.OleDbConnection.Open() 
    at NAnt.Contrib.Util.SqlHelper..ctor(String connectionString, Boolean useTransaction) 
    at NAnt.Contrib.Tasks.SqlTask.ExecuteTask() 
    at NAnt.Core.Task.Execute() 
    at NAnt.Core.Target.Execute() 
    at NAnt.Core.Project.Execute(String targetName, Boolean forceDependencies) 
    at NAnt.Core.Project.Execute() 
    at NAnt.Core.Project.Run() 

मैं ऑनलाइन खोज की है और पाया है कि एक मंच में यह सुझाव दिया गया था कि मुझे माइक्रोसॉफ्ट एसक्यूएल सर्वर मूल क्लाइंट, और got it from this URL स्थापित करने की आवश्यकता है। (माना जाता है कि, मैंने केवल इस के मूल ग्राहक भाग को स्थापित किया है)

यह मेरे दूसरे पीसी पर स्थापित होने के बावजूद, स्क्रिप्ट अभी भी मुझे एक ही त्रुटि देता है। कोई सुझाव?

+0

काम करना चाहिए था ... क्या आपने मशीन को पुनरारंभ करने का प्रयास किया था? –

+1

कोई विशेष कारण है कि आप .NET से OleDB प्रदाता का उपयोग क्यों करते हैं? SqlClient प्रदाता का उपयोग करें, इसे किसी भी ड्राइवर को स्थापित करने की आवश्यकता नहीं है, सब कुछ .net के साथ जहाजों की आवश्यकता है। –

+0

यदि आवश्यक हो तो वह SQL सर्वर के अलावा किसी अन्य चीज़ को लिखने की लचीलापन चाहता है। – SqlRyan

उत्तर

21

SQL सर्वर 2008 के लिए सही प्रदाता SQLNCLI10.1 है।
SQL सर्वर 2012 के लिए, यह SQLNCLI11 होगा। (source)

दुख की बात है, 2008 के लिए प्रवास परिवर्तन लेने नहीं था ...

+0

आप सही थे! एसक्यूएलएनसीएल 10 के संदर्भ में कनेक्शन स्ट्रिंग की आवश्यकता है, और स्क्रिप्ट में SQLNCLI नहीं है। अच्छा है। –

+1

ब्रेट, आपने सही SQLNCLI10 के बजाय SQLNCL10 कहा। शायद एक टाइपो, लेकिन मैंने इसे काट दिया और चिपकाया :-( –

+0

इसे थोड़ा साफ करने के लिए संपादित किया गया। मुझे प्रदाताओं की आधिकारिक सूची नहीं मिली। इंटरनेट पर कुछ लोग सुझाव देते हैं ** 'SQLNCLI11.1' ** भी काम करता है 2012 के लिए। – Kobi

4

यह x86/x64 के साथ एक समस्या हो सकता है? यदि प्रश्न में वर्कस्टेशन x64 है, और आपने क्लाइंट के x64 संस्करण को स्थापित किया है, लेकिन जिस एप्लिकेशन को आप चलाने का प्रयास कर रहे हैं वह x86 स्पेस में है, तो आपको उस वर्कस्टेशन पर क्लाइंट के x86 संस्करण की भी आवश्यकता हो सकती है। एक x86 ऐप केवल प्रदाता के x86 संस्करण की जांच करेगा, और कोई भी नहीं देखेगा, इस तरह की त्रुटि देगा। X64 संस्करण शायद किसी भी संस्करण की जांच करने के लिए पर्याप्त स्मार्ट है, हालांकि शायद आपके पास एक ही स्थिति होगी।

यह वही बात ओडीबीसी - x86 और x64 डेटा स्रोतों के साथ होती है अन्य प्रकार के अनुप्रयोगों के लिए उपलब्ध नहीं है - यदि आप दोनों अनुप्रयोगों के निर्माण से कुछ दिखाना चाहते हैं, तो आपको एक ओडीबीसी स्रोत बनाना होगा प्रत्येक संस्करण का व्यवस्थापक उपकरण।

+0

पीसी 64 बिट मशीनें हैं, इसलिए आप वहां कुछ हो सकते हैं ... मुझे और जांच करनी होगी! –

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