使用Ado.net阅读Ms Access

我在C#中读取数据库(Ms Access)。 我正在使用Ado.net进行连接。 这个数据库有很多表(大约100个),每个表有大约50列和500行。 每个字段包含不同的数据类型(整数,字符串,布尔)。 我要做的是我必须将选定的表和字段转换为二进制格式。

经过一些文献调查后,我计划使用’DataReader’读取数据,因为我只需要为二进制转换读取变量。

我的问题是

在C#编程方面应该是什么样的数据结构? 说如果我为所有表创建单独的类并定义成员变量和方法,我怎样才能使它更有效? 因为我已经提到有100个表和50个字段,实际上我不需要选择所有字段(我只需要选择所需的字段)。 我不想像它那样硬编码(例如)

SELECT BusinessEntityID, LoginID, NationalIDNumber from table1Name 

因为我必须遍历选定的表和我的代码中提到的选定字段。 由于我对SQL有点新意,能不能提供一些提示? 换句话说,如果我问如何使用表和字段的变量使选择查询有效(如果这个问题有任何问题,请纠正我)

更新

下面提到的SQL Server SELECT INTO @variable?

如上所述(100 x 50 = 5000)拥有巨大的字段总数,首先使用OleDb读取SchemaTable可能很有用:

清单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数据库表中读取数据并使用DataAdapter OleDb对象在DataSet填充DataTable的实际过程如下所示(它最初封装在我的自定义DB操作类中,如语法所示,因此您可以根据需要进行修改) :

 #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上的post:链接http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbconnection.getoledbschematable.aspx

注意 :第一步(清单1)是可选的。 这两个过程都基于OleDb对象在MS Access DB上运行。 对于其他数据库类型(例如MS SQL服务器),有不同的对象集(如SQLConnection等)