如何知道 OleDb 连接中的 Access 数据库中是否存在表

Vah*_*hid 5 .net c# oledb datareader oledbconnection

OleDb我使用下面的代码通过连接来连接到 Access 数据库C# .Net

我如何知道硬编码到程序中的表是否确实存在于文件中,以便我可以向用户显示适当的消息?

try
{
    var dbSource = "Data Source = " + source;
    const string dbProvider = "PROVIDER=Microsoft.Jet.OLEDB.4.0;";

    using (var con = new OleDbConnection())
    {
        con.ConnectionString = dbProvider + dbSource;
        con.Open();

        using (var cmd = new OleDbCommand())
        {
            cmd.Connection = con;
            cmd.CommandText = "SELECT * FROM [Concrete Design Table 1]";

            // How do I know the table name is valid? It results in errors when it is not?
            // How to prevent it?
            using (var dataReader = cmd.ExecuteReader())
            {
                while (dataReader != null && dataReader.Read())
                {
                    // read the table here
                }
            }
        }
    }
}
catch (Exception e)
{
    MessageBox.Show(e.ToString());
}
Run Code Online (Sandbox Code Playgroud)

svi*_*nja 5

您可以使用以下命令获取表列表

var schema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
Run Code Online (Sandbox Code Playgroud)

并浏览它们:

foreach (var row in schema.Rows.OfType<DataRow>())
{
    string tableName = row.ItemArray[2].ToString();
}
Run Code Online (Sandbox Code Playgroud)

或检查是否存在:

if (schema.Rows
          .OfType<DataRow>()
          .Any(r => r.ItemArray[2].ToString().ToLower() == tablename.ToLower()))
{
    // table exists
}
Run Code Online (Sandbox Code Playgroud)

丑陋,我知道。:(