2013-01-23 8 views
5

için Çayı'ndan AccessFile okumak için, düzenli uygulamasıdır:Kullanım OLEDB I (.accdb) DataSet, ben tablo isimleri veya sütunları bilmem bir AccessFile okumak için OleDB kullanın DataSet

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(); 
    } 
    } 
} 
} 

Ama Access Dosyasını Stream'den almalıyım ve bunu Diske geçici olarak yazamam, yani öneriniz nedir?

İhtiyacım olan bu GetAccessDB(Stream AccessFile) mu? This'u bulup buluyorum, ancak bu benim için net değil, Access File'deki tüm Tablolar tarafından nihayet DataSet'e ihtiyacım var.

Bunu bilen var mı?

+0

Niçin akış olarak açılan bir 'Erişim 'dosyasında veri işlemlerini yapmak istersiniz? Sadece merak. –

+0

@AlexFilipovici İstemciler Yükleme Dosyasını Yüklüyor Ve Bunları Okumalı ve Hedef Veri Bulmalı ve SQL'de saklanmalı ve İstemciye Bir Hedef Veri Tablosu Göstereyim, fakat (bazı sınırlamalar) Dosyaları Diske Yazamıyorum! – Saeid

+0

nasıl oluyor da yerel disk üzerinde çalışma yapamazsınız ..? lütfen aklınızı daha iyi açıklayın, böylece başkalarının anlayabildiği ve sizi altın yoldan aşağı götürmediği için – MethodMan

cevap

1

MS SQL Server üzerinde denetiminiz varsa, bu iyi bir haber.

  1. işleyecek bir CLR asssembly (uyumsuz iyi bir fikirdir) oluştur insert yüklenen dosyalar tabloda yapıldıktan sonra dosyayı: Şu anda 2 alternatifleri görüyoruz. Yüklenen dosyanın içeriğini kullanarak sunucuda geçici bir MS Access dosyası oluşturur. Ardından, OleDB ile açın, ayrıştırın ve bilgileri, ilk tabloda yüklenen dosya kaydıyla ayıklanan bilgileri eşleyen bir SQL tablosuna ekleyin. Sonra, bu ikinci tablodaki veriye bakabilirsin. create a file on the filesystem için

    1. Kullanım yüklenen dosya bayt:

    2. Başka bir seçenek SQL aşağıdaki yapacak bir komut göndermek olacaktır.

    3. Sonra Her iki seçenekleri (en azından geçici) SQL Server dosyasını oluştururken içerdiğini fark etmiş olabilirsiniz

Erişim veritabanını sorgulamak için bir linked server

  • Kullanım SELECT olarak dosyayı kullanmak .

  • +0

    Teşekkürler Alex, bırak deneyeyim. – Saeid

    2

    Bellek içi veritabanlarıyla çalışmak için OleDb'de herhangi bir api işlevi tanımıyorum. Belki bir RAMDisk kurabilir misin?

    İlgili konular