gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 17:33:48 25 4
gpt4 key购买 nike

如何获取 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com