从数据库中获取表的列表

时间:2017-02-02 21:14:04

标签: c# oledb visual-foxpro

有谁能告诉我如何从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\"";

1 个答案:

答案 0 :(得分:5)

我认为使用OleDbConnection.GetSchema()是可行的方法。你这样做,它只返回可用的元数据信息。您需要选择所需的元数据。您看到的信息包括'可用限制'和'标识符部分的数量'要查看表的列表(使用Table_type -view或表格,描述,修改和创建日期等附加信息),您需要传递表格'作为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"]);
    }
}