从 C# 如何验证 MS Access DB 中是否已存在表

本文关键字:DB Access 是否 存在 MS 何验证 验证 | 更新日期: 2023-09-27 17:56:28

从C#开始,我正在打开MS Access DB并将值导入Access Table。我们需要验证 MS 访问数据库中是否已存在表?

 access.OpenCurrentDatabase(sMedExpressAccessDB, true, null);
 // Drop the existing table data
 access.DoCmd.DeleteObject(Access.AcObjectType.acTable, "drug");
 // Run the saved import
 access.DoCmd.RunSavedImportExport("MedExpressODBC");
 // Close the database
 access.CloseCurrentDatabase();

从 C# 如何验证 MS Access DB 中是否已存在表

一种方法是使用msysobjects表。 例如

SELECT COUNT(*) FROM msysobjects where name = 'foo' and type = 1

您还可以使用 DAO tableDef 对象。如果我没记错的话,如果您愿意,可以通过 DAO 的运行时可调用包装器访问它。

Chok,尝试使用尝试...捕获删除命令周围的构造,以在删除不存在的对象时忽略错误。

如果你真的需要找出一个表是否存在,因为你正在使用.Net,我建议对OleDbConnections使用GetOleDbSchemaTable方法,参见这里:TekTips帖子由逆风使用此VB代码:

Dim schemaDT As DataTable
Dim thisNull As System.DBNull()
schemaDT = thisConn.GetOleDbSchemaTable( _
OleDbSchemaGuid.Tables, thisNull)

正如引用的帖子所提到的:

从此语句返回的数据表是有关表的信息的集合 优点是这种方法也适用于其他 ADO.Net 数据库(稍作修改)。 有关详细信息,请参阅 MSDN 文档。

选择:正如人们所说,您可以在 Access 中使用 msysobjects 系统表,但不能保证该表在各种 Access 版本中具有相同的信息。

此外,您可以使用 DAO Tabledefs 集合或其 ADO 等效项。

这在使用 c# 进行 ms 访问时很有帮助。测试

protected void Button1_Click(object sender, EventArgs e)
{
    string DB = Server.MapPath("App_Data/OnlineTestEngine.mdb");
    con = new OleDbConnection("Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + DB);
    string query = "Select * from current_test";
    con.Open();
    cmd1 = new OleDbCommand(query, con);
    try
    {
        dr = cmd1.ExecuteReader();
        if (dr.GetName(0).ToString() == "Qno")
        {
            Label1.Text = "Table Already Exist";
            dr.Close();
            con.Close();
            con.Open();
            string q = "Drop table current_test";
            OleDbCommand cmd2 = new OleDbCommand(q, con);
            cmd2.ExecuteNonQuery();
            Label1.Text += " | Table Deleted from Database";
        }
    }
    catch(Exception ex)
    {
        Label1.Text = "Table Not Exist";
        string query2 = "create table current_test(Qno counter, Questions varchar(255), ans1 varchar(255), ans2 varchar(255), ans3 varchar(255), ans4 varchar(255), right_ans varchar(255), marks int, response int, PRIMARY KEY (Qno))";
        cmd3 = new OleDbCommand(query2, con);
        con.Close();
        con.Open();
        dr = cmd3.ExecuteReader();
        Label1.Text += " | Table Created Sucessfully";
    }
    finally
    {
        con.Close();
    }
}