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