2009-05-14 6 views
14

मैं .csv, .xls, और .xlsx फ़ाइलों में पढ़ने के लिए Microsoft.Jet.OLEDB.4.0 और Microsoft.ACE.OLEDB.12.0 का उपयोग कर रहा हूं।ओलेडीबी 64 बिट मोड में समर्थित नहीं है?

मुझे अभी पता चला है कि इनमें से कोई भी तकनीक देशी 64 बिट मोड में समर्थित नहीं है! क्या है को समर्थित तरह से प्रोग्राम के, .csv पढ़ .xls, और 64 बिट मोड में .xlsx फ़ाइलों को

  1. :

    2 प्रश्न हैं। मैं बस कहीं भी इसका जवाब नहीं ढूंढ सकता।

  2. अगर मैं सभी तीन फाइल में प्रकार नहीं पढ़ सकते हैं, क्या सबसे अच्छा तरीका है एक 64 बिट वातावरण में .csv फ़ाइलें को पढ़ने के लिए है?

नोट्स:

  • मैं नेट (3.5p1)
  • यह एक छोटा रैप अनुप्रयोग है उपयोग कर रहा हूँ; पुनर्वितरण महत्वपूर्ण कारक है।

अद्यतन:

मैं 32bit मोड है, जो काम करता है, लेकिन वांछनीय नहीं है में चलाने के लिए आवेदन के लिए मजबूर करने CorFlags उपयोग कर सकते हैं।

उत्तर

7

यहां पर चर्चा है कि about deprecated MDAC क्या करना है। मुझे डर है कि इस सवाल का जवाब बहुत संतोषजनक नहीं है हूँ ...

इन नए या परिवर्तित जेट अनुप्रयोगों और .xls .mdb माइक्रोसॉफ्ट कार्यालय 2003 और पूर्व फ़ाइलें (का उपयोग कर के इरादे से जेट उपयोग करने के लिए जारी रख सकते हैं) गैर-प्राथमिक डेटा संग्रहण के लिए। हालांकि, इन अनुप्रयोगों के लिए, आपको जेट से 2007 Office सिस्टम ड्राइवर में माइग्रेट करना चाहिए। आप 2007 कार्यालय सिस्टम ड्राइवर डाउनलोड कर सकते हैं, जो आपको से पहले से मौजूद फ़ाइलों को पढ़ने और लिखने की अनुमति देता है Office 2003 (.mdb और .xls) या Office 2007 (* .accdb, * .xlsm , * .xlsx और * .xlsb) फ़ाइल स्वरूप। महत्वपूर्ण कृपया 2007 Office सिस्टम एंड उपयोगकर्ता विशिष्ट उपयोग सीमाओं के लिए लाइसेंस अनुबंध पढ़ें।

नोट: एसक्यूएल सर्वर आवेदन भी Access 2007 आफिस सिस्टम, और कर सकते हैं पहले, एसक्यूएल सर्वर से फाइल विषम डेटा कनेक्टिविटी और साथ ही एकीकरण सेवा योग्यताओं 2007 Office सिस्टम ड्राइवर के माध्यम से,। इसके अतिरिक्त, 64-बिट एसक्यूएल सर्वर अनुप्रयोग 32-बिट जेट और 2007 कार्यालय सिस्टम फ़ाइलों को 32-बिट SQL Server इंटीग्रेशन सर्विसेज (एसएसआईएस) 64-बिट विंडोज़ पर उपयोग कर सकते हैं।

+1

ऐसा लगता है कि 2007 कार्यालय सिस्टम चालक जाने का रास्ता है। हालांकि, 25 एमबी डाउनलोड थोड़ा खड़ा है। –

+0

यह मेरे लिए अस्पष्ट है कि 2007 कार्यालय सिस्टम चालक वास्तव में x64 है, क्योंकि जेईटी के प्रतिस्थापन के विरोध में ... क्या किसी ने इसे सत्यापित किया है? –

+0

नहीं, यह निश्चित रूप से x86 है क्योंकि मैं बस इस सीमा में भाग गया है जो MSSQL x64 में किसी लिंक किए गए सर्वर के रूप में SharePoint को जोड़ने का प्रयास कर रहा है। ओपी पर लागू नहीं है, लेकिन जिस तरह से मैंने इसके आसपास काम किया था, वह एक अलग x86 इंस्टेंस स्थापित करना था जो ओलेड स्रोत से जुड़ा हुआ था और इसे दृश्यों के समूह और x86 इंस्टेंस से जुड़े x64 इंस्टेंस के साथ लपेटा गया था। – Josh

1

वास्तव में मुझे लगता है कि लिंक इसके लिए आपका सबसे अच्छा समाधान है।

तरह

....

IEnumerable<MyObj> ObjList = GetObjList(yourCSVFileNAme); 

var qry = from o in ObjList 
      where o.MyField == Something 
      select o; 

और अपने GetObjList विधि लगता है कि

Public IEnumerable<MyObj> GetObjList(string filename) 
{ 
    // Obvioulsly you would have some actual validation and error handling 
    foreach(string line in File.ReadAllLines(filename)) 
    { 
    string[] fields = line.Split(new char[]{','}); 
    MyObj obj = new MyObj(); 
    obj.Field = fields[0]; 
    obj.AnotherField = int32.Parse(fields[1]); 
    yield return obj; 
    } 
} 
+0

धन्यवाद टिम! मैं 'अपने स्वयं के' सीएसवी पार्सिंग समाधान रोलिंग से बचने की उम्मीद कर रहा था। मुझे पता है कि यह रॉकेट विज्ञान नहीं है, लेकिन यह कभी-कभी आश्चर्यजनक रूप से सूक्ष्म होता है। –

+2

एक सीएसवी फ़ाइल को पार्स करना उतना आसान नहीं है जितना पोस्ट किया गया है (कोष्ठक में टेक्स्ट, अलग-अलग इलाकों के लिए अलग विभाजक चार ...) लेकिन वहां बहुत से सीएसवी पार्सर्स हैं। – VVS

4

मुख्य समस्या कुछ है कि जेट डीबीएमएस कि बुला प्रक्रिया में लोड हो जाता है एक 32bit पुस्तकालय है , इसलिए आप 64 बिट मोड में सीधे अपने ऐप के भीतर जेट का उपयोग करने में सक्षम नहीं होंगे। जैसा कि टिम ने बताया है कि आप अपना स्वयं का सीएसवी पार्सर लिख सकते हैं, लेकिन चूंकि यह एक सिकुड़-रैप ऐप है, इसलिए आप कुछ ऐसा चाहते हैं जो प्रारूपों की एक विस्तृत श्रृंखला को संभालेगा। सौभाग्य से, 32-बिट ऐप्स से बात करने के कई तरीके हैं, इसलिए आप अभी भी एक चाल के साथ जेट का उपयोग कर सकते हैं।

मैं थोड़ा एक्सई लिखूंगा जो केवल 32-बिट मोड में चलाने के लिए चिह्नित किया गया था। यह exe फ़ाइल पढ़ने के लिए कमांड लाइन तर्क और लिखने के लिए एक temp फ़ाइल का नाम ले जाएगा। मैं सीएसवी/एक्सएलएस लोड करने के लिए जेट का उपयोग करता हूं, फिर डेटा को सरणी के सरणी में डालता हूं, और temp फ़ाइल में डेटा लिखने के लिए xml serializer का उपयोग करता हूं।

फिर जब मैं लोड/एक csv/xls फ़ाइल बदलने की जरूरत है, मैं निम्नलिखित करना होगा:

object[][] ConvertFile(string csvOrXlsFile) 
{ 
    var output = System.IO.Path.GetTempFileName(); 
    try 
    { 
     var startinfo = new System.Diagnostics.ProcessStartInfo("convert.exe", 
      string.Format("\"{0}\" \"{1}\"", csvOrXlsFile, output)); 

     System.Diagnostics.Process proc = new System.Diagnostics.Process(); 
     proc.StartInfo = startinfo; 

     proc.Start(); 
     proc.WaitForExit(); 

     var serializer = new System.Xml.Serialization.XmlSerializer(typeof(object[][])); 
     using (var reader = System.IO.File.OpenText(output)) 
      return (object[][])serializer.Deserialize(reader); 
    } 
    finally 
    { 
     if (System.IO.File.Exists(output)) 
      System.IO.File.Delete(output); 
    } 
} 
+1

मुझे यह विकल्प पसंद है, यह चीजों को यथासंभव साफ रखता है। यह दुर्लभ है कि आपको एक फ्लैट फ़ाइल को अपने आंतरिक डेटा ऑब्जेक्ट में परिवर्तित करने के लिए x64 चलाने की आवश्यकता होगी; हालांकि, यह संभावना है कि आपके आंतरिक डेटा ऑब्जेक्ट्स में डेटा होने के बाद आप x64 का लाभ लेना चाहते हैं। – Nate

4

आप अपने फ्लैट फ़ाइल पार्स के लिए FileHelpers पुस्तकालय की कोशिश कर सकते। आश्चर्यजनक रूप से अच्छी तरह से काम करता है।

+0

धन्यवाद क्रिस्टोफर ... मैंने फाइलहेल्पर पर विचार किया था, लेकिन एलजीपीएल अभी भी एक वाणिज्यिक कोड बेस में शामिल करने के लिए अवांछनीय है, जहां तक ​​मैं बता सकता हूं ... –

+0

एक्सेल फाइलों को संभालने के लिए फाइलहेल्पर स्रोत कोड के अनुसार, यह एडोडीबी का उपयोग करता है जो 32 बिट ऐप्स तक ही सीमित है। अतिरिक्त जानकारी के लिए ExtractDataTable फ़ंक्शन देखें। –

+0

@AlexanderN मुझे स्रोत कोड नहीं दिखाई देता है लेकिन मैंने Excel फ़ाइल को पढ़ने के लिए 64 बिट्स एप्लिकेशन के साथ प्रयास किया और यह पूरी तरह से काम करता है। एडो का उपयोग कर अपने पुराने कोड के साथ एक ही समस्या एक अपवाद फेंक देते हैं। इस अच्छी पुस्तकालय के लिए – Samuel

3

.csv/.xls/.xlsx कार्यपुस्तिकाएं (और more) पढ़ और लिख सकते हैं और 64 बिट .NET 2.0+ का समर्थन करते हैं। स्प्रेडशीट गियर आपके सिकुड़ रैप अनुप्रयोगों के साथ रॉयल्टी मुक्त वितरित किया जा सकता है।

आपने यह निर्दिष्ट नहीं किया है कि आपका एप्लिकेशन WinForms या ASP.NET है लेकिन स्प्रेडशीटगियर या तो काम करता है। आप लाइव एएसपी.नेट (सी #वीबी) नमूने here देख सकते हैं, WinForms नमूने here के बारे में जानें और यदि आप इसे स्वयंमाने की कोशिश कर रहे हैं तो एक नि: शुल्क परीक्षण here डाउनलोड करें।

अस्वीकरण: मैं खुद SpreadsheetGear LLC

+0

दिलचस्प जो लगता है। धन्यवाद! –

3

आप Microsoft Access Database Engine 2010 Redistributable उपयोग कर सकते हैं पढ़ सकते हैं और सीएसवी, xls पहुँच आदि लिखना एक 32 और 64 प्रत्येक ड्राइवर के बिट संस्करण नहीं है करने के लिए।

+0

अच्छा! मुझे उम्मीद थी कि एमएस से जल्दी या बाद में कुछ आएगा –

2

यह किसी भी व्यक्ति के लिए एक सूचनात्मक पोस्ट है जो इस समस्या का सामना कर रहा है (और खुद के लिए मुझे भविष्य में एक ही समस्या है और समाधान याद नहीं है :-)) यह एक प्रकार का अस्पष्ट है लेकिन मुझे कारण तनाव के कुछ घंटों, तो शायद यह किसी और की मदद करेगा ... क्षमा करें अगर यह दोहराया गया है (इसे नहीं मिला) या बहिष्कृत (कुछ नवीनतम और महानतम की लक्जरी नहीं है)।

यदि आप x64- आधारित सर्वर पर एमएस एक्सेल दस्तावेज़ (या अन्य डेटा फ़ाइलों) तक पहुंचने के लिए जेट 4.0 का उपयोग करने का प्रयास कर रहे हैं, तो आप पाएंगे कि इस संयोजन के लिए कोई समर्थन नहीं है।

एकमात्र समाधान आईआईएस को विंडोज 64 पर 32-बिट अनुप्रयोग चलाने और समर्थित डीबी प्रदाता स्थापित करने की अनुमति देना है।

आप ड्राइवर, ODBC (MSDASQL) के लिए 64-बिट OLEDB प्रदाता है कि एक सेतु के रूप में कार्य करता है स्थापित करने के लिए की आवश्यकता होगी: "ODBC (MSDASQL) के लिए Microsoft OLE DB प्रदाता ऐसी तकनीक है जो अनुप्रयोग जो निर्माण कर रहे हैं अनुमति देता है ओडीडीबी और एडीओ (जो आंतरिक रूप से ओएलडीडीबी का उपयोग करता है) पर ओडीबीसी चालक के माध्यम से डेटा स्रोतों तक पहुंचने के लिए। एमएसडीएएसक्यूएल एक ओएलडीडीबी प्रदाता है जो डेटाबेस के बजाय ओडीबीसी से जुड़ता है। विंडोज ऑपरेटिंग सिस्टम के साथ एमएसडीएएसक्यूएल जहाज, और विंडोज सर्वर 2008 & विंडोज विस्टा एसपी 1 प्रौद्योगिकी के 64-बिट संस्करण को शामिल करने वाली पहली विंडोज रिलीज हैं। " यहाँ डाउनलोड करें: http://www.microsoft.com/downloads/details.aspx?FamilyID=000364db-5e8b-44a8-b9be-ca44d18b059b&displaylang=en

यह सब ठीक काम करता है, लेकिन मैं दो बातें किया था कि मुझे मेरे सिर खरोंच (और जोर) में आए: 1) आप आईआईएस वेब सेवा एक्सटेंशन में 32-बिट ASP.Net अनुमति देने के लिए की जरूरत है - 32-बिट ऐप्स और आईआईएस वेब सेवा एक्सटेंशन सेटअप दोनों को सक्षम करने के निर्देशों के लिए "http://www.textcontrol.com/blog/permalink/2006082101" पढ़ें। 2) यदि आप आईआईएस x64 के तहत किसी भी रजिस्ट्री कुंजियों का उपयोग कर रहे हैं, तो रजिस्ट्री में एक नया नोड जोड़ा जाएगा - Wow6432Node - जिसमें आपको x64 के तहत उपयोग की जाने वाली किसी भी प्रासंगिक कुंजी को स्थानांतरित/कॉपी करने की आवश्यकता होगी। यानी हमारे पास एचसीएलएम \ सॉफ्टवेयर \ कस्टमकी में संग्रहीत डेटा कुंजी थी जो अब 32-बिट सक्षम होने पर उपलब्ध नहीं थी। हमने Wow6432Node के तहत कुंजी को फिर से बनाया और सब अच्छा था।

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