2009-03-25 8 views
6

के बाद जीवन मैंने कुछ समय पहले question से पूछा था कि स्थानीय डीबी मेरी स्थिति के लिए सही था। मुझे .NET कोड और वीबी 6 दोनों से डीबी तक पहुंचने की आवश्यकता थी। जबरदस्त प्रतिक्रिया SQLite थी। हालांकि, मैंने SQLite को पास करने का निर्णय लिया, क्योंकि इसके लिए केवल ओएलई डीबी प्रदाता मेरे सॉफ़्टवेयर की प्रत्येक तैनाती प्रति के लिए रॉयल्टी लगाता है। इसे प्रत्येक पीसी पर एक सक्रियण प्रक्रिया चलाने की भी आवश्यकता होती है।एक्सेस डेटाबेस इंजन के पेशेवरों और विपक्ष। SQLite

अन्य विकल्पों का मूल्यांकन करने के बाद (SQL सर्वर कॉम्पैक्ट संस्करण - मुश्किल से कार्यात्मक ओएलई डीबी प्रदाता, फायरबर्ड - किसी अन्य ड्राइवर के लिए भुगतान नहीं करना चाहते हैं, आदि ...), मैं निष्कर्ष निकाला हूं कि केवल व्यवहार्य पसंद माइक्रोसॉफ्ट एक्सेस (या जेट इंजन) द्वारा बनाई गई एमडीबी फाइलों का उपयोग कर रहा है।

मैंने 90 के दशक के उत्तरार्ध से इसका उपयोग नहीं किया है, इसलिए मेरे पास निम्नलिखित प्रश्न हैं जिनके साथ इसका अनुभव है।

  1. क्या उन्होंने समस्या का समाधान किया है जहां डेटाबेस हर समय भ्रष्ट होगा।
  2. एडीओ.NET ओएलडीडीबी प्रदाता के माध्यम से सी # से एमडीबी तक पहुंच है या क्या कोई मूल समाधान है (मुझे यह नहीं लगता है)।
  3. क्या एक्सेस में वास्तव में क्रैपी एसक्यूएल संपादक के लिए एक व्यवहार्य विकल्प है?

धन्यवाद।

+0

परीक्षण मामलों का एक सूट का निर्माण कर सकते, प्रत्याशित प्रतिफल मानों को निर्दिष्ट और भी बहुत अच्छा है मैं काफी के एक नंबर के लिए ग्राहकों की एक संख्या से उपयोग में छोटे पहुँच आवेदन के एक नंबर मिला है सालों और केवल भ्रष्टाचार के दो उदाहरणों को याद कर सकते हैं, एक बहुत मामूली, एक कम तो, दोनों वसूल करने योग्य। यह इसे ठीक से स्थापित करने का विषय है: http://allenbrowne.com/ser-25.html – Fionnuala

उत्तर

7

बल्कि तो जा रहा "वापस" पहुँच करने के लिए, मैं SQLite के साथ चिपके रहते हैं और SQLite के लिए System.Data.SQLite प्रदाता का उपयोग करेंगे .NET कोड के भीतर डेटा का उपयोग।

तब मैं केवल एक साधारण COM इंटरऑप .NET क्लास बनाउंगा जो वीबी 6 द्वारा उपयोग के लिए है जो किसी भी आवश्यक SQLite डेटा एक्सेस कार्यक्षमता को लपेटता है। अंत में, बस संदर्भ दें और इसे अपनी वीबी 6 परियोजनाओं से मानक COM ऑब्जेक्ट की तरह उपयोग करें।

एक्सेस का मेरा ज्ञान संभवतः थोड़ा सा अनुभव और खराब अनुभवों से पक्षपाती है, लेकिन कारण के भीतर मैं एक्सेस रूट का उपयोग करने से पहले अन्य विकल्पों का प्रयास करूंगा।

+1

.net इंटरऑप एक अच्छा विचार है। मैंने इसके बारे में नहीं सोचा था। धन्यवाद। – AngryHacker

+0

कोई समस्या नहीं है। आपके पास प्रत्येक विधि कॉल पर COM wrapper के साथ एक अतिरिक्त प्रदर्शन हिट है। लेकिन यदि आप विधियों को डिज़ाइन करते हैं ताकि आप उन्हें केवल एक या दो बार कॉल कर सकें, उदाहरण के लिए, उदाहरण के लिए, लूप में प्रत्येक पुनरावृत्ति, प्रदर्शन अभी भी काफी अच्छा हो सकता है। – Ash

5

क्या आपने SQL Server 2008 Express Edition (SQL सर्वर सीई का विरोध करने के रूप में) माना है?

1) व्यक्तिगत रूप से, मैंने पाया कि अधिकांश बार एक्सेस डीबी दूषित होने के कारण यह कोड के कारण था जो स्वयं के बाद साफ नहीं हुआ था, या इसमें एक दोषपूर्ण नेटवर्क कार्ड शामिल था।

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
          @"Data Source = C:\data\northwind.mdb; " + 
          @"User Id = guest; Password = abc123” 


using (OleDbConnection oleDbConnection = New OleDbConnection()) 
{ 
    oleDbConnection.ConnectionString = connectionString; 

    oleDbConnection.Open(); 

    ... 
} 

3) एसक्यूएल सर्वर 2008 एक्सप्रेस संस्करण

+0

चेतावनी - माइक्रोसॉफ्ट हर तीन या चार वर्षों में एक नए और अलग मोबाइल डेटाबेस के साथ बाहर आ जाता है। – dkretz

+0

क्या आप कह रहे हैं कि आप SQL सर्वर 2008 एक्सप्रेस संस्करण के साथ एक्सेस के लिए SQL संपादित कर सकते हैं? – AngryHacker

1

आप SQL Anywhere भी कोशिश कर सकते हैं यह विभिन्न ओएस पर चलता है और इसमें एक छोटा पदचिह्न होता है। मेरे लिए काम करता है :)

2

चूंकि एमडीबी प्रारूप कम या ज्यादा बहिष्कृत है, इसलिए आपका 90 के दशक का ज्ञान काफी अद्यतित है। See this MSDN page

+0

उह, बहिष्कृत प्रौद्योगिकियों पर उस लेख का अनुभाग एमडीएसी के बारे में है जो अन्य इंटरफेस के माध्यम से जेट का उपयोग करने के बारे में इतना नहीं है। यह आलेख डीएओ के बारे में भी गलत है, जिसका हालिया अपडेट A2007 है। –

+0

यही कारण है कि मैंने कहा "अधिक या कम", एमएस थोड़ा सा आ गया है। लेकिन यह स्पष्ट रूप से डीबी मंच नहीं है जहां चीजें हो रही हैं। –

+0

एक व्यावहारिक रुख आईएमओ यह है कि जेट और एमडीबी प्रारूप को बहिष्कृत किया गया है और एसीई और .accdb प्रारूप में केवल पहुंच में भविष्य है। इंजन (जैसे उपयोगकर्ता स्तर की सुरक्षा, प्रतिकृति) से अधिक हटा दिया गया है (बहु-मूल्य प्रकार, कोई भी?) लेकिन यह प्रगति की कीमत है :) – onedaywhen

4

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

मैं SQLite को किसी भी अलग होने की अपेक्षा नहीं करता, और यदि कुछ भी बदतर हो।

समय-समय पर JetComp चला रहा है।exe (एक माइक्रोसॉफ्ट डाउनलोड) कई समस्याओं और कॉम्पैक्ट इंडेक्स टेबल और इस तरह से ठीक करेगा। बैकअप महत्वपूर्ण हैं चाहे आप जो भी इस्तेमाल करते हों।

जेट एमडीबी का उपयोग करने के लिए आपको एमएस एक्सेस की आवश्यकता नहीं है। डेटाबेस स्कीमा को डिजाइन करने और कमांड लाइन और जीयूआई दोनों इंटरैक्टिव क्वेरी करने के लिए कुछ तृतीय पक्ष टूल हैं।

+0

आपके बिंदु के लिए धन्यवाद। मैं वही कहने जा रहा था। सभी डेटाबेस फ़ाइलों को भ्रष्टाचार के जोखिम का सामना करना पड़ता है। सभी डेटाबेस फ़ाइलों को एक प्रभावी बैकअप और वसूली विकल्प की आवश्यकता है। एक्सेस फाइलें अलग नहीं हैं। इस संबंध में उनका उपयोग करने का नकारात्मक पक्ष है ... आप लाइव बैकअप नहीं कर सकते हैं। लेकिन इसे कई स्थितियों में काम करने के लिए बनाया जा सकता है। –

1

एंग्रीहेकर ने पूछा:

प्रश्न 1। क्या उन्होंने समस्या का समाधान किया है जहां डेटाबेस हर समय भ्रष्ट होगा।

एर, क्या?

उचित ढंग से बनाए गए वातावरण में ठीक से इंजीनियर किए गए ऐप्स में उचित रूप से तैनात किए गए किसी भी भ्रष्टाचार की समस्या नहीं थी। मैंने 3 या 4 वर्षों में भ्रष्ट एमडीबी नहीं देखा है, और मेरे पास कई अलग-अलग प्रकार के ऑपरेटिंग वातावरण में कई ग्राहकों द्वारा पूर्णकालिक उत्पादन के उपयोग में दर्जनों ऐप्स हैं।

मुझे लगता है कि भ्रष्टाचार का अनुभव करने वाले अधिकांश लोग हैं जो कई उपयोगकर्ताओं (चाहे विभाजित या अनुसूचित) के बीच एमडीबी फ़ाइल साझा करने का प्रयास करते हैं। चूंकि आप एक्सेस का उपयोग करने पर विचार नहीं कर रहे हैं, यह वास्तव में एक मुद्दा नहीं है।

प्रश्न 2। एडीओ.NET ओएलडीडीबी प्रदाता के माध्यम से सी # से एमडीबी तक पहुंच है या क्या कोई मूल समाधान है (मुझे यह नहीं लगता है)।

मूल समाधान डीएओ होगा, लेकिन यह COM है, इसलिए आप इसका उपयोग नहीं करना चाहेंगे। सी # से, मैं कहूंगा कि ओएलईडीबी आपकी सबसे अच्छी शर्त है, लेकिन यह विशेषज्ञता का मेरा क्षेत्र नहीं है इसलिए इसे नमक के अनाज से लें। मेरा मानना ​​है कि माइकल कपलन ने बताया कि जेट एडीओ/ओएलडीडीबी प्रदाता थ्रेड-सुरक्षित था, जबकि डीएओ नहीं था। इसका मतलब यह नहीं है कि उन्होंने डीएओ पर एडीओ/ओएलडीडीबी की सिफारिश की, लेकिन उनकी टिप्पणियां भी एक एक्सेस संदर्भ में आईं, न कि सी #।

क्यू 3। क्या वास्तव में एक्सेस में वास्तव में क्रैपी एसक्यूएल संपादक के लिए एक व्यवहार्य विकल्प है?

जब आप वास्तव में एक्सेस का उपयोग नहीं कर रहे हैं तो आप इसका उपयोग क्यों करेंगे? जब तक आप जांचते हैं कि आपके द्वारा लिखे गए एसक्यूएल को जेट की एसक्यूएल बोली के साथ संगत है, तो आप किसी भी SQL संपादक का उपयोग कर सकते हैं।

मैं, एक के लिए, यह नहीं देखता कि एक्सेस के एसक्यूएल संपादक (फ़ॉन्ट आकार सेट करने में असमर्थता के अलावा) के साथ समस्या क्या है, लेकिन फिर, मैं क्यूबीई का उपयोग करके अपना बहुत सी एसक्यूएल लिखता हूं और नहीं कभी भी एसक्यूएल व्यू को देखें।

+0

"जब आप वास्तव में एक्सेस का उपयोग नहीं कर रहे हैं तो आप इसका उपयोग क्यों करेंगे?" एर, क्या? एक्सेस में एसक्यूएल संपादक का आकलन करने में सक्षम होने के लिए निश्चित रूप से वे एक्सेस का उपयोग कर रहे हैं ?! – onedaywhen

+0

मुझे नहीं लगता कि एक्सेस में SQL संपादक है; बल्कि, इसमें एक जीयूआई क्वेरी बिल्डर है जिसमें SQL व्यू है। एक ऑनलाइन एसक्यूएल फॉर्मेटर (http://www.dpriver.com/pp/sqlformat.htm) पर एक नज़र डालें और वह डिग्री जिस पर इसे अनुकूलित किया जा सकता है। एक्सेस में कोई तुलनीय विशेषताएं नहीं हैं :( – onedaywhen

+0

मैंने कभी भी उन विशेषताओं को याद नहीं किया है। –

1

एक्सेस में वास्तव में क्रैपी एसक्यूएल संपादक के बारे में आपके प्रश्न का उत्तर देने के लिए - मैं पूरी तरह से सहमत हूं। फ़ॉन्ट बदबू आ रही है, MSAccess हमेशा क्वेरी को बुरी तरह सुधारता है, यह कभी-कभी मेटाएक्टेक्टर्स में जोड़ता है जो मेरे एसक्यूएल को तोड़ता है, और आखिरकार लेकिन सबसे खराब, अगर यह एसक्यूएल को पार्स नहीं कर सकता है, तो यह आपको इसकी पहुंच नहीं देगा!

मेरा समाधान बाहरी कोड का उपयोग करना है। मैं MSAccess को तत्काल करने के लिए डीएओ का उपयोग करता हूं और फिर QueryDefs संग्रह का उपयोग कर क्वेरी को सीधे संपादित कर सकता हूं। यह आपको अधिकतर चीजें करने देता है - बनाएं, नाम बदलें, संपादित करें आदि। ऐसी कुछ चीजें हैं जो आप इस तरह से नहीं कर सकते हैं - उदाहरण के लिए, आपके पास क्वेरी मेटाडेटा (विवरण, छुपा, आदि) तक पहुंच नहीं है।

बाहरी कोड क्योंकि आप आदि

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