簡體   English   中英

從C#,如何驗證MS Access DB中是否已經存在表

[英]From C#, How to validate whether Table is already exists in MS Access DB

從C#,我正在打開MS Access DB並將值導入到Access Table。 我們需要驗證MS Access DB中是否已經存在Table?

 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();

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

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

您還可以使用DAO tableDef對象。 如果我沒記錯的話,可以根據需要通過DAO的運行時可調用包裝程序進行訪問。

k,嘗試在delete命令周圍使用try ... catch構造,以在刪除不存在的對象時忽略該錯誤。

如果您確實需要查找表是否存在,例如在使用.Net時,我建議對OleDbConnections使用GetOleDbSchemaTable方法,請參見此處: TekTips由Headwinds發表,帶有以下vb代碼:

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

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

從此語句返回的DataTable是有關表的信息的集合。優點在於,此方法也可以(在稍作修改的情況下)適用於其他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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM