2013-01-23 76 views
5

को स्ट्रीम से AccessFile पढ़ने के लिए मैं OLEDB का प्रयोग करें एक AccessFile पढ़ने के लिए (.accdb) डेटासेट के लिए, मैं मेज के नाम या स्तंभों के बारे में पता नहीं है, नियमित रूप से दिया गया है:उपयोग OLEDB डेटासेट

public void GetAccessDB(string filepath){ 

this.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source = " + filepath; 
// get Table Names 
this.TableNames = new List<string>(); 
using (System.Data.OleDb.OleDbConnection oledbConnection = new System.Data.OleDb.OleDbConnection(this.ConnectionString)) 
{ 
oledbConnection.Open(); 
System.Data.DataTable dt = null; 
dt = oledbConnection.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); 
foreach (System.Data.DataRow row in dt.Rows) 
{ 
    string strSheetTableName = row["TABLE_NAME"].ToString(); 
    if (row["TABLE_TYPE"].ToString() == "TABLE") 
    this.TableNames.Add(strSheetTableName); 
} 
oledbConnection.Close(); 
} 


this.Dataset = new System.Data.DataSet(); 
using (System.Data.OleDb.OleDbConnection oledbConnection = new System.Data.OleDb.OleDbConnection(this.ConnectionString)) 
{ 
    foreach (string table in this.TableNames) 
    { 
    string command = string.Format("SELECT * FROM {0};", table); 
    using (System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand(command, oledbConnection)) 
    { 
     cmd.CommandType = System.Data.CommandType.Text; 
     oledbConnection.Open(); 
     System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader(); 
     this.Dataset.Load(dr, System.Data.LoadOption.OverwriteChanges, table); 
     oledbConnection.Close(); 
    } 
    } 
} 
} 

लेकिन मुझे स्ट्रीम से एक्सेस फ़ाइल प्राप्त करने की आवश्यकता है, और मैं इसे डिस्क अस्थायी पर नहीं लिख सकता, तो आपका सुझाव क्या है?

मुझे GetAccessDB(Stream AccessFile) का यह अधिभार चाहिए? मैं खोज और This ढूंढता हूं, लेकिन यह मेरे लिए स्पष्ट नहीं है, मुझे अंत में एक्सेस फ़ाइल में सभी टेबल्स द्वारा डेटासेट प्राप्त करने की आवश्यकता है।

क्या कोई इस बारे में जानता है?

+0

स्ट्रीम के रूप में खोले गए 'एक्सेस' फ़ाइल में आप डेटा ऑपरेशंस क्यों करना चाहते हैं? बस उत्सुक। –

+0

@AlexFilipovici ग्राहक अपलोड फ़ाइल अपलोड करें और मुझे उन्हें पढ़ने और लक्ष्य डेटा ढूंढने और SQL पर संग्रहीत करने और क्लाइंट को लक्ष्य डेटा की एक तालिका दिखाएं, लेकिन मैं (कुछ सीमा) डिस्क पर फ़ाइलों को लिख नहीं सकता! – Saeid

+0

आप स्थानीय डिस्क पर काम कैसे नहीं कर सकते .. ..? कृपया अपने तर्क को बेहतर तरीके से समझाएं ताकि अन्य लोग सुन सकें और आपको सुनहरा पथ नहीं ले जा सकें क्योंकि वे कहते हैं कि – MethodMan

उत्तर

1

यदि आपके पास MS SQL Server पर नियंत्रण है, तो यह अच्छी खबर है।

  1. बनाएँ CLR asssembly कि कार्रवाई करेंगे (अतुल्यकालिक रूप से एक अच्छा विचार है) फ़ाइल एक बार डालने अपलोड की गई फ़ाइलों तालिका में किया जाता है: मैं वर्तमान में 2 विकल्प देखें। यह अपलोड की गई फाइल की सामग्री का उपयोग करके सर्वर पर अस्थायी MS Access फ़ाइल बनाएगा। फिर, इसे OleDB के साथ खोलें, इसे पार्स करें और उस से SQL तालिका में जानकारी डालें जो पहले तालिका में अपलोड किए गए फ़ाइल रिकॉर्ड के साथ निकाली गई जानकारी को मानचित्र करता है। फिर, आप जा सकते हैं और इस दूसरी तालिका में डेटा की तलाश कर सकते हैं। create a file on the filesystem को

    1. उपयोग अपलोड की गई फ़ाइल बाइट्स:

    2. एक अन्य विकल्प एसक्यूएल के लिए एक आदेश जो निम्न करेगा भेजने के लिए किया जाएगा।

    3. फिर, जैसा कि एक linked server
    4. उपयोग SELECT फ़ाइल का उपयोग एक्सेस डेटाबेस

आपने ध्यान दिया होगा कि दोनों विकल्पों बनाने एक (कम से कम अस्थायी) एसक्यूएल सर्वर पर फ़ाइल शामिल क्वेरी करने के लिए ।

+0

धन्यवाद एलेक्स, मुझे कोशिश करने दो। – Saeid

2

मुझे इन-मेमोरी डेटाबेस के साथ काम करने के लिए ओलेडीबी में कोई एपीआई फ़ंक्शन नहीं पता है। शायद, क्या आप एक रैमडिस्क स्थापित कर सकते हैं?