繁体   English   中英

使用Ado.net阅读Access女士

[英]reading Ms Access using Ado.net

我正在用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. Get 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上的文章:链接http://msdn.microsoft.com/zh-cn/library/system.data.oledb.oledbconnection.getoledbschematable.aspx

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

暂无
暂无

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

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