.net 使用GetOleDbSchemaTable获取名为";的表的列;街道";

.net 使用GetOleDbSchemaTable获取名为";的表的列;街道";,.net,sql,ms-access,.net,Sql,Ms Access,我试图通过打开OLEDB连接来读取Access数据库中表“Streets”的列名。我调用GetOleDbSchemaTable,但似乎不知道如何获取我的列 如果可能的话,我想使用.NET 3.5 framework。这对我来说很有用,它将表street的列名放在一个列表中 using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); DataTabl

我试图通过打开OLEDB连接来读取Access数据库中表“Streets”的列名。我调用GetOleDbSchemaTable,但似乎不知道如何获取我的列


如果可能的话,我想使用.NET 3.5 framework。

这对我来说很有用,它将表street的列名放在一个列表中

using (OleDbConnection connection = new OleDbConnection(connectionString))
{
    connection.Open();

    DataTable tableColumns = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Columns, new object[] { null, null, "Streets", null }));
    foreach (DataRow row in tableColumns.Rows)
    {
        var columnNameColumn = row["COLUMN_NAME"];
        var dateTypeColumn = row["DATA_TYPE"];
        var ordinalPositionColumn = row["ORDINAL_POSITION"];
        ...
    }
}
OleDbCommand mdbCommand = new OleDbCommand("SELECT * FROM Streets", mdbConnection);
OleDbDataReader myReader = mdbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable  schemaTable = myReader.GetSchemaTable();
List<String> columnNameList = new List<string>();
foreach (DataRow myField in schemaTable.Rows)
{
foreach (DataColumn myProperty in schemaTable.Columns)
{
if (myProperty.ColumnName == "ColumnName") columnNameList.Add(myField[myProperty].ToString());
}

}
OleDbCommand mdbCommand=新的OleDbCommand(“从街道选择*”,mdbConnection);
OleDbDataReader myReader=MDBComand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable schemaTable=myReader.GetSchemaTable();
List columnNameList=新列表();
foreach(schemaTable.Rows中的DataRow myField)
{
foreach(schemaTable.Columns中的DataColumn myProperty)
{
如果(myProperty.ColumnName==“ColumnName”)columnNameList.Add(myField[myProperty].ToString());
}
}

@vc 74对我不起作用,我得到“DataTable没有IEnum的公共定义”,所以甚至不能使用foreach,然后当我把它放在for{}中时,它会说COLUMN_NAME不是表“Tables”的成员是的,但您打开的查询可能需要时间来执行(比元数据查询更长),而且您可能无法从GetOleDbSchemaTable获得所有信息