12

मैं एक विंडोज सी # एप्लीकेशन विकसित करता हूं जो ऑनलाइन और ऑफ़लाइन मोड में काम कर सकता है।
जब ऑनलाइन मोड में यह SQL सर्वर से कनेक्ट होता है। ऑफ़लाइन मोड में यह स्थानीय डीबी से जुड़ता है।एमएस सिंक फ्रेमवर्क और एसक्यूएल सर्वर कॉम्पैक्ट

मैं मांग पर 2 डेटाबेस सिंक करने के लिए Microsoft सिंक फ्रेमवर्क 2.1 का उपयोग करता हूं।

अब तक मैंने स्थानीय डेटाबेस के रूप में SQL सर्वर का एक स्थानीय डीबी उदाहरण उपयोग किया था। लेकिन यह मेरे आवेदन की स्थापना प्रक्रिया के दौरान सिस्टम को स्वचालित रूप से सेटअप करने का दर्द है। इसलिए मैंने SQL सर्वर कॉम्पैक्ट 3.5 या 4.0 का उपयोग करने के लिए सोचा जो वितरित करना बहुत आसान है (एक फ़ाइल में आता है)।

लेकिन मैं यह भी कॉम्पैक्ट डीबी के प्रावधान कोड संकलित करने के लिए नहीं मिल सकता है:

DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("MyScope"); 
SqlCeConnection clientConn = new SqlCeConnection(OfflineConnectionString); 
var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); 
clientProvision.Apply(); 

जो मैं (Ce वर्गों के बिना) से पहले थे, लेकिन SqlCeSyncScopeProvisioning हल नहीं किया जा सकता है।

यहां कुछ गड़बड़ है।
मैं अपने कॉम्पैक्ट डीबी को अपने स्थानीय डेटाबेस के रूप में वितरित करने के लिए कैसे सिंक कर सकता हूं?

+0

पर अपने कोड को माइग्रेट करने में सक्षम होना चाहिए क्या आपने स्थानीय डीबी डेटाबेस फ़ाइलों को वितरित करने का प्रयास किया है? आप किसी विशेष स्थानीय डीबी फ़ाइल से कनेक्ट कर सकते हैं। जैसे 'कनेक्शनस्ट्रिंग =" डेटा स्रोत = (लोकलडीबी) \ v12.0; AttachDbFilename = सी: \ MyDatabase.mdf; प्रारंभिक कैटलॉग = MyDatabase; एकीकृत सुरक्षा = सही "'। मैंने क्लाइंट पीसी पर अपने ऐप्स वितरित नहीं किए हैं, इसलिए मुझे नहीं पता कि * SqlLocalDB * स्थापित करना परेशानी है या नहीं, लेकिन आप इसे एक शॉट दे सकते हैं। – Gabrielius

+0

SqlLocalDB स्थापित करना इतना आसान नहीं है। विशेष रूप से इसे काम करने के लिए जब मुझे एक पुराना मौजूदा उदाहरण निकालना है और नया इंस्टॉल करना है। लेकिन अगर कॉम्पैक्ट दृष्टिकोण विफल रहता है तो मुझे उस पर काम करना जारी रखना होगा। धन्यवाद। –

+0

पुराने को क्यों हटा दें? क्या यह तुम्हारा है? आप जो भी नाम चाहते हैं उसके साथ आप एक नया उदाहरण जोड़ सकते हैं। मुझे लगता है, मैं स्थानीय डीबी की वकालत कर रहा हूं, क्योंकि सीई थोड़ी पुरानी है और अंत में मर जाएगी। – Gabrielius

उत्तर

7

पहले सुनिश्चित करें, आपने सफलतापूर्वक sdk स्थापित किया है? ,

  • Microsoft.Synchronization.Data.Server.dll

  • माइक्रोसॉफ्ट

    • Microsoft.Synchronization.Data.dll:

      इस के बाद, सुनिश्चित करें कि आप निम्नलिखित संदर्भ जोड़ लिया है बनाना .Synchronization.Data.SqlServer.dll

    • माइक्रोसॉफ्ट.Synchronization.Data.SqlServerCe.dll
    ,0
  • संपादित

    अपनी टिप्पणी के खिलाफ, यह है केवल अगर आप का उपयोग काम कर -

    इसके अलावा मेरे मामले में यह

    • System.Data.SqlServerCe जोड़ने के साथ काम किया एसक्यूएल सर्वर सीई 4.

      मैंने अब SQL सर्वर सीई 3.5 और इसके साथ कोशिश की है कार्य मैं आपकी समस्या का पुनरुत्पादन कर सकता हूं।

      SQL सर्वर सीई 4.0 पर स्विचिंग इसे ठीक किया गया।

      उदाहरणटेबल 4।0

      Table

      TestCode

      var scopeDesc = new DbSyncScopeDescription("MyScope"); 
      var tbl = new DbSyncTableDescription("TestTable"); 
      var pkColumn = new DbSyncColumnDescription("Id", "int"); 
      pkColumn.IsPrimaryKey = true; 
      tbl.Columns.Add(pkColumn); 
      tbl.Columns.Add(new DbSyncColumnDescription("Name", "nvarchar(254)")); 
      scopeDesc.Tables.Add(tbl); 
      var clientConn = new SqlCeConnection(@"Data Source=test.sdf;Persist Security Info=False;"); 
      var clientProvision = new SqlCeSyncScopeProvisioning(clientConn, scopeDesc); 
      clientProvision.Apply(); 
      

      परिणाम

      सब कुछ अच्छी तरह से संकलित करता है। उपर्युक्त चरणों का पालन करने के बाद, आप आसानी से SQL सर्वर सीई

    +0

    उत्तर के लिए धन्यवाद। मैं वीएस2013 का उपयोग करता हूं। एसडीके सही ढंग से स्थापित है क्योंकि मैंने इसे पहले से ही स्थानीय डीबी इंस्टेंस के साथ इस्तेमाल किया है और यह काम करता है। मैंने केवल सीई में बदलने की कोशिश की और अब यह कोड को संकलित नहीं करता है, जिसे निश्चित रूप से 'SqlSyncScopeProvisioning' का उपयोग करके' SqlCeSyncScopeProvisioning' का उपयोग करके समायोजित करना था। मैं एसक्यूएल कॉम्पैक्ट 3.5 का भी उपयोग करता हूं क्योंकि 4.0 नवीनतम सिंक फ्रेमवर्क के साथ समर्थित नहीं है। सभी डीएलएल समाधान में जोड़े गए हैं। –

    +0

    @juergend मेरा उत्तर अपडेट किया गया – lokusking

    +0

    माइक्रोसॉफ्ट के 3.5 के बजाय संस्करण 3.1 का उपयोग करना। सिंक्रनाइज़ेशन। डेटा.क्लससेवर Ce.dll ने इसे मेरे लिए हटा दिया। मैंने कॉम्पैक्ट 4.0 के साथ इसे आजमाया नहीं है क्योंकि आप उन विभिन्न साइटों पर पढ़ सकते हैं जिन्हें यह समर्थित नहीं है। –

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