繁体   English   中英

在C#中从MDB读取到字典的最快方法

[英]The fastest way to read from MDB to Dictionary in C#

我想从MDB文件中读取一个较大的表,并将其字段保存到Dictionary 这是一次操作,此后,我将不需要UPDATEINSERT INTO数据库。 所以我只需要一个SELECT查询。

最快的方法是什么? 使用数据集似乎很慢:

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

可能最有效的方法是使用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;
}

我认为您应该检查在阅读器读取时带循环的数据读取器是否可以更快地将项目添加到词典中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM