正如您所描述的那样拥有大量的字段(100 x 50 = 5000),SchemaTable
首先使用以下方法阅读可能会很有用OleDb
:
清单 1. 获取 SchemaTable(可选)
static DataTable GetSchemaTable(string connectionString)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
connection.Open();
DataTable schemaTable =
connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] { null, null, null, "TABLE" });
return schemaTable;
}
}
清单 2. 从 MS Access 数据库表中读取数据
从 MS Access 数据库表中读取数据并使用对象填充DataTable
的实际过程如下所示(它最初被封装在我的自定义 DB 操作类中,如语法所示,因此您可以根据需要对其进行修改):DataSet
DataAdapter
OleDb
#region DataSet, DataAdapter, DataTable
internal DataSet dataSet;
internal OleDbDataAdapter dataAdapter;
internal DataTable dataTable;
private OleDbConnection connection;
#endregion
internal GetData(string SelectQuery, string ConnectionString)
{
try
{
#region Create Data Objects: Connection, DataAdapter, DataSet, DataTable
// use OleDb Connection to MS Access DB
connection = new OleDbConnection(ConnectionString);
connection.Open();
// create new DataAdapter on OleDb Connection and Select Query text
dataAdapter = new OleDbDataAdapter();
dataAdapter.SelectCommand = new OleDbCommand(SelectQuery, connection);
// create DataSet
dataSet = new DataSet();
// retrieve TableSchema
// DataTable[] _dataTablesSchema = _dataAdapter.FillSchema(_dataSet, SchemaType.Source, "{TABLE NAME}");
DataTable[] _dataTablesSchema = dataAdapter.FillSchema(dataSet, SchemaType.Source);
// there is only one Table in DataSet, so use 0-index
dataTable = _dataTablesSchema[0];
// use DataAdapter to Fill Dataset
dataAdapter.Fill(dataTable);
// OPTIONAL: use OleDbCommandBuilder to build a complete set of CRUD commands
OleDbCommandBuilder builder = new OleDbCommandBuilder(dataAdapter);
// Update, Insert and Delete Commands
dataAdapter.UpdateCommand = builder.GetUpdateCommand();
dataAdapter.InsertCommand = builder.GetInsertCommand();
dataAdapter.DeleteCommand = builder.GetDeleteCommand();
#endregion
connection.Close();
}
catch {throw; }
}
有关详细信息,请参阅 MSDN 上的帖子:链接http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx
注意:第一步(清单 1)是可选的。这两个过程都基于OleDb
对 MS Access DB 进行操作的对象。对于其他 DB 类型(例如 MS SQL 服务器),有不同的对象集(如SQLConnection
等)