gpt4 book ai didi

c# - 从数据库中获取表列表

转载 作者:太空狗 更新时间:2023-10-30 01:01:03 28 4
gpt4 key购买 nike

谁能告诉我如何从 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() 是可行的方法。按照您的方式,它只会返回可用的元数据信息。您需要选择所需的元数据。您看到的信息是“可用限制”和“标识符部分的数量”的计数。要仅查看表格列表(以及其他信息,例如 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"]);
}
}

关于c# - 从数据库中获取表列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012401/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com