1

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

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

我的问题是

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

SELECT BusinessEntityID, LoginID, NationalIDNumber from table1Name

因为我必须遍历代码中某处提到的选定表和选定字段。由于我对SQL有点陌生,请您提供一些提示吗?以另一种方式,如果我问这个问题如何使用表和字段的变量使选择查询有效(如果这个问题有任何问题,请纠正我)

更新

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

4

1 回答 1

2

正如您所描述的那样拥有大量的字段(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 操作类中,如语法所示,因此您可以根据需要对其进行修改):DataSetDataAdapter 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等)

于 2013-05-09T01:02:14.147 回答