【发布时间】:2011-09-03 09:33:07
【问题描述】:
我需要查看我的 c# 程序使用的 Access 数据库中是否存在表。是否知道其他数据库的 SQL 命令将返回表列表。 Access/Jet数据库有这样的命令吗?
【问题讨论】:
我需要查看我的 c# 程序使用的 Access 数据库中是否存在表。是否知道其他数据库的 SQL 命令将返回表列表。 Access/Jet数据库有这样的命令吗?
【问题讨论】:
那个对我有用
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"]);
}
}
【讨论】:
试试 GetSchema()
connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\access.mdb";
connection.Open();
DataTable userTables = connection.GetSchema("Tables");
【讨论】:
这样的事情应该可以解决问题。子句Type = 1 指定表。请注意,这还将包括结果集中的系统表(它们以前缀“MSys”开头。
SELECT Name FROM MSysObjects WHERE Type = 1
【讨论】:
Record(s) cannot be read; no read permission on 'MSysObjects'.
完整代码:Get List of Tables in an Access Database - ADO.NET Tutorials
// 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())
【讨论】: