【发布时间】:2017-02-02 21:14:04
【问题描述】:
谁能告诉我如何从 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\"";
【问题讨论】:
-
您当然可以在查询中添加 WHERE 子句:WHERE objecttype="Table"
-
@TamarE.Granor 好收获!我会补充的。
-
然后呢?这解决了你的问题吗?如果是这样,请将其发布为答案。
-
@JeroenMostert 确实如此,但 Cetin 想出了一个更好的解决方案,所以我将他标记为正确答案。
标签: c# oledb visual-foxpro