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

标签 c# database ms-access

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

是否有我可以使用的 SQL 查询,或者是否有 C# 代码可以执行此操作?

最佳答案

使用IDataReader.GetSchemaTable()

这是一个 Access 表模式并以 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());
    }
}

兴趣点:

  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>

关于c# - 如何获取数据库表的字段名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/857942/

相关文章:

c# - 如何将按钮添加到 DataGridView 中的列

c# - 基于两个 vector3 完美定位对象?

c# - 如何使类通用以在c#中传递动态属性类

c# - 如何检查数据库可用性

php - 删除从数据库收到的重复列表项

javascript - 浓缩系列 mySQL 查询

mysql - 使用另一个表中的列值填充 MySQL 中的列

vba - 按字段名称引用列表框列

sql - MS Access SQL,没有数字字段的 Rnd 函数

database - 如何从Access数据库中随机选择多项选择题