Gen*_*e S 4 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();
}
Run Code Online (Sandbox Code Playgroud)
我认为可能有某种方式我可以直接打开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();
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
随着Tamar的建议将查询语句改为此...
cmd.CommandText = $"SELECT ObjectName FROM {database} WHERE ObjectType = \"Table\"";
Run Code Online (Sandbox Code Playgroud)
我认为使用OleDbConnection.GetSchema()是可行的方法.你这样做,它只返回可用的元数据信息.您需要选择所需的元数据.您看到的信息是"可用限制"和"标识符部分数量"的计数.要仅查看表列表(使用Table_type -view或表格,描述,修改和创建日期等附加信息),您需要将"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"]);
}
}
Run Code Online (Sandbox Code Playgroud)