如何获取数据库表的字段名称?

Gol*_*old 9 c# database ms-access

如何获取MS Access数据库表的字段名称?

我可以使用SQL查询,还是有C#代码来执行此操作?

VVS*_*VVS 8

使用IDataReader.GetSchemaTable()

这是一个访问表模式并以XML格式打印它的实际示例(只是为了查看您获得的信息):

class AccessTableSchemaTest
{
    public static DbConnection GetConnection()
    {
        return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=..\\Test.mdb");
    }

    static void Main(string[] args)
    {
        using (DbConnection conn = GetConnection())
        {
            conn.Open();

            DbCommand command = conn.CreateCommand();
            // (1) we're not interested in any data
            command.CommandText = "select * from Test where 1 = 0";
            command.CommandType = CommandType.Text;

            DbDataReader reader = command.ExecuteReader();
            // (2) get the schema of the result set
            DataTable schemaTable = reader.GetSchemaTable();

            conn.Close();
        }

        PrintSchemaPlain(schemaTable);

        Console.WriteLine(new string('-', 80));

        PrintSchemaAsXml(schemaTable);

        Console.Read();
    }

    private static void PrintSchemaPlain(DataTable schemaTable)
    {
        foreach (DataRow row in schemaTable.Rows)
        {
            Console.WriteLine("{0}, {1}, {2}",
                row.Field<string>("ColumnName"),
                row.Field<Type>("DataType"),
                row.Field<int>("ColumnSize"));
        }
    }

    private static void PrintSchemaAsXml(DataTable schemaTable)
    {
        StringWriter stringWriter = new StringWriter();
        schemaTable.WriteXml(stringWriter);
        Console.WriteLine(stringWriter.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

兴趣点:

  1. 不要通过给出总是求值为false的where子句来返回任何数据.当然,只有当您对数据不感兴趣时​​才适用:-).
  2. 使用IDataReader.GetSchemaTable()获取DataTable,其中包含有关实际表的详细信息.

对于我的测试表,输出是:

ID, System.Int32, 4
Field1, System.String, 50
Field2, System.Int32, 4
Field3, System.DateTime, 8
--------------------------------------------------------------------------------
<DocumentElement>
  <SchemaTable>
    <ColumnName>ID</ColumnName>
    <ColumnOrdinal>0</ColumnOrdinal>
    <ColumnSize>4</ColumnSize>
    <NumericPrecision>10</NumericPrecision>
    <NumericScale>255</NumericScale>
    <DataType>System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</DataType>
    <ProviderType>3</ProviderType>
    <IsLong>false</IsLong>
    <AllowDBNull>true</AllowDBNull>
    <IsReadOnly>false</IsReadOnly>
    <IsRowVersion>false</IsRowVersion>
    <IsUnique>false</IsUnique>
    <IsKey>false</IsKey>
    <IsAutoIncrement>false</IsAutoIncrement>
  </SchemaTable>
  [...]
</DocumentElement>
Run Code Online (Sandbox Code Playgroud)


KM.*_*KM. 6

这将适用于sql server 2005及以上版本:

select * from INFORMATION_SCHEMA.COLUMNS 
where TABLE_Name='YourTableName'
order by ORDINAL_POSITION
Run Code Online (Sandbox Code Playgroud)

  • 但我在Access工作,在访问中它不起作用 (2认同)

BIB*_*IBD 5

运行此查询:

select top 1 *
From foo
Run Code Online (Sandbox Code Playgroud)

然后遍历结果集中的列表字段(和返回值)以获取字段名称。