2014-03-18 103 views
0

我想從MDB文件讀取一個相對較大的表並將其字段保存爲Dictionary。這是一次性操作,之後我不需要UPDATEINSERT INTO數據庫。所以我只需要一個SELECT查詢。從MDB讀取字典到C#中的最快方法

什麼是最快速的方法來做到這一點。使用數據集看起來很慢:

var con = new OleDbConnection(); 
const string dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"; 
const string dbSource = "Data Source = D:/programming/Frames.mdb"; 

con.ConnectionString = dbProvider + dbSource; 
con.Open(); 
const string query = "SELECT * FROM [Concrete Design 1 - Column Summary Data - ACI 318-99]"; 
var dt = new DataTable(); 
var da = new OleDbDataAdapter(query, con); 
da.Fill(dt); 


for (int i = 0; i < dt.Rows.Count; i++) 
{ 
    // Create Dictionary here 
} 

我知道使用下面的方法會更快,但我只是不知道如何得到它的權利:

var con = new OleDbConnection(); 
const string dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;"; 
const string dbSource = "Data Source = D:/programming/Frames.mdb"; 
con.ConnectionString = dbProvider + dbSource; 
var cmd = new OleDbCommand { Connection = con }; 
con.Open(); 
cmd.CommandText = "SELECT * FROM [Concrete Design 1 - Column Summary Data - ACI 318-99]"; 


// I don't know how get the fields and rows from the database 

con.Close(); 
+0

怎麼辦你想存儲爲關鍵和價值? –

+0

作爲關鍵字的第一個字段和其他字段將被定義爲類中的屬性並設置爲字典的值。 – Vahid

+0

事實上,當你使用Jet時,還有很多其他的事情需要擔心。保持它幾個月沒有數據損壞是一個重大的努力。不速度,這是一個非常有效的ISAM。 –

回答

2

也許最有效的方法是使用DataReader將數據流式傳輸到Dictionary。您可以使用DataReader.FieldCount獲取字段數。

下面是使用保持着各個領域的自定義類的例子:

var dict = new Dictionary<object, Record>(); 
using(var reader = cmd.ExecuteReader()) 
{ 
    while(reader.Read()) 
    { 
     object key = reader[0]; 
     Record rec = new Record(key); 
     for(int i=0; i< reader.FieldCount; i++) 
     { 
      rec.Fields.Add(reader[i]); 
     } 
     dict.Add(key, rec); 
    } 
} 

這裏的類,使用正確的類型和多種性質的,而不是列表如果可能的話:

public class Record 
{ 
    public Record(object key) 
    { 
     this.Key = key; 
     Fields = new List<object>(); 
    } 
    public object Key; 
    public List<object> Fields; 
} 
+0

謝謝。我查了一下,在我的情況下沒有太大的區別。 :( – Vahid

+0

我選擇了這個答案,儘管它沒有提高速度,但對內存有好處:P – Vahid

1

我認爲你應該檢查是否使用DataReader閱讀器閱讀的循環會更快地將項目添加到您的詞典。

相關問題