我需要查看我的C#程序使用的Access数据库中是否存在表格。我知道其他数据库有SQL命令可以返回表格列表。Access/Jet数据库是否有此类命令?
尝试使用 GetSchema()。
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\access.mdb";
connection.Open();
DataTable userTables = connection.GetSchema("Tables");
完整代码: 使用ADO.NET获取Access数据库中的表列表 - ADO.NET教程
// Microsoft Access provider factory
DbProviderFactory factory =
DbProviderFactories.GetFactory("System.Data.OleDb");
DataTable userTables = null;
using (DbConnection connection =
factory.CreateConnection())
{
// c:\test\test.mdb
connection.ConnectionString = "Provider=Microsoft
.Jet.OLEDB.4.0;Data Source=c:\\test\\test.mdb";
// We only want user tables, not system tables
string[] restrictions = new string[4];
restrictions[3] = "Table";
connection.Open();
// Get list of user tables
userTables =
connection.GetSchema("Tables", restrictions);
}
// Add list of table names to listBox
for (int i=0; i < userTables.Rows.Count; i++)
listBox1.Items.Add(userTables.Rows[i][2].ToString())
该链接是关于ADOD.NET数据提供程序的技术讨论。类似这样的代码可实现此功能。条件句 Type = 1
指定表格。需注意,它会包括系统表格在结果集中(它们以 "MSys" 前缀开头)。
SELECT Name FROM MSysObjects WHERE Type = 1
那个对我有用
using (OleDbConnection con = new OleDbConnection(connectionString))
{
con.Open();
DataTable dt = con.GetSchema("Tables");
var selectNames = dt.Rows.Cast<DataRow>().Where(c => !c["TABLE_NAME"].ToString().Contains("MSys")).ToArray();
foreach (var item in selectNames)
{
// add names to comboBox
comboBox1.Items.Add(item["TABLE_NAME"]);
}
}