Мне повезло со свойством GetSchema в OleDb.Connection:
Класс для предоставления данных столбца. Это возвращает ВСЕ столбцы в базе данных. Результирующий DataTable затем может быть отфильтрован по именам столбцов, которые (в основном) соответствуют тем, которые встречаются в стандарте INFORMATION_SCHEMA (который MS Access НЕ предоставляет для нас):
class JetMetaData
{
/// <summary>
/// Returns a datatable containing MetaData for all user-columns
/// in the current JET Database.
/// </summary>
/// <returns></returns>
public static DataTable AllColumns(String ConnectionString)
{
DataTable dt;
using (OleDbConnection cn = new OleDbConnection(ConnectionString))
{
cn.Open();
dt = cn.GetSchema("Columns");
cn.Close();
}
return dt;
}
}
Затем, использование класса в довольно грубом и не очень элегантном примере и фильтрация по TABLE_NAME:
private void Form1_Load(object sender, EventArgs e)
{
DataTable dt = JetMetaData.AllColumns("", Properties.Settings.Default.JetConnection);
String RowFilter = "TABLE_NAME = 'YourTableName'";
DataView drv = dt.DefaultView;
drv.RowFilter = RowFilter;
DataGridView dgv = this.dataGridView1;
dgv.DataSource = drv;
}
Обратите внимание, что я не претендую на то, что это хорошо продуманный код. Это только пример. Но я несколько раз использовал что-то подобное и даже создал приложение для создания сценария для всей базы данных MS Access (ограничения и все), используя похожие методы.
Хотя я видел, как другие в этой теме упоминали схему get, похоже, что некоторые реализации были слишком сложными. , .
Надеюсь, это поможет!