从数据库中获取表列表

Get list of tables from database

谁能告诉我如何从 C# 中获取 Visual FoxPro 数据库中的表列表?

我尝试使用 GetSchema 但返回的信息似乎只是计数(而不是准确计数)。

这是我的...

string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc";
using (var cmdSrc = new OleDbCommand())
using (var dbconnSrc = new OleDbConnection(connSrc))
{
    dbconnSrc.Open();
    DataTable schema = dbconnSrc.GetSchema();
}

我认为可能有一些方法可以直接打开 dbc 文件并 运行 一个 SELECT 反对它,但问题是数据库位于连接字符串的路径中。我找不到可以提取架构信息的 OleDb 命令。

编辑:

我找到了一种可行的方法,但它似乎有点笨拙。有人知道更好的方法吗?

string connSrc = @"Provider=VFPOLEDB.1;Data Source=myvfpdb.dbc";
using (var conn = new OleDbConnection(connSrc))
    dbc = conn.DataSource;

string path = Path.GetDirectoryName(dbc);
string database = Path.GetFileName(dbc);

using (var conn = new OleDbConnection(@"Provider=VFPOLEDB.1;Data Source=" + path))
{
    conn.Open();
    using (var cmd = conn.CreateCommand())
    {
        cmd.CommandText = "SELECT * FROM " + database;
        DbDataReader reader = cmd.ExecuteReader();

    }
}

编辑:

根据 Tamar 的建议将查询语句更改为...

 cmd.CommandText = $"SELECT ObjectName FROM {database} WHERE ObjectType = \"Table\"";

我认为使用 OleDbConnection.GetSchema() 是可行的方法。你这样做的方式,它只是 returns 你可用的元数据信息。您需要选择所需的元数据。您看到的信息是 'available restrictions' 和 'number of identifier parts' 的计数。要仅查看 table 的列表(以及 Table_type-view 或 table- 等附加信息、描述、修改和创建日期),您需要将 'Tables' 作为GetSchema 的参数。即:

void Main()
{
    string strCon =
           @"Provider=vfpoledb;Data Source=C:\PROGRAM FILES (x86)\MICROSOFT VISUAL FOXPRO 9\SAMPLES\data\testdata.dbc";
    DataTable tableInfo;
    using (OleDbConnection con = new OleDbConnection(strCon))
    {
        con.Open();
        tableInfo = con.GetSchema("Tables");

        // or get TABLES only
        // tableInfo = con.GetSchema("Tables", new string[] {null,null,null,"TABLE"});

        con.Close();
    }
    foreach (DataRow row in tableInfo.Rows)
    {
        Console.WriteLine(@"Name:[{0}] Type:[{1}]",
            row["TABLE_NAME"],
            row["TABLE_TYPE"]);
    }
}