2011-05-16 81 views
0

從C#,我打開MS Access DB &導入值到訪問表。我們需要驗證MS Access DB中是否已經存在表格?從C#中,如何驗證表是否已存在MS Access數據庫

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

你問你是如何驗證表存在,因爲DeleteObject調用拋出一個錯誤,當表不存在?如果是這種情況,只需將其包裝在try塊中。 – 2011-05-16 15:32:57

+0

那麼,在我繼續爲DeleteObject ..我需要像ExistsObject!有一個語法來驗證,但我不知道。 – goofyui 2011-05-16 15:44:25

回答

1

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

如果你真的需要找出一張表是否存在,就像你使用.Net一樣,我建議使用OleDbConnections的GetOleDbSchemaTable方法,在這裏: TekTips post by Headwinds 這個VB代碼:

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

被引用的帖子中提到:

數據表是從該語句返回的是有關表 信息的收集的優點是,這方法也適用於其他ADO.Net數據庫(稍作修改)。 有關更多信息,請參閱MSDN文檔。

替代方案: 正如人們所說的,你可以使用msysobjects系統表的訪問,但該表不能保證在不同的Access版本相同的信息。

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

3

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

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

您還可以使用DAO tableDef對象。如果我記得正確的話,這可以通過DAO的Runtime可調用包裝來訪問,如果你想。

+0

是否適用於MS Access? – goofyui 2011-05-16 15:44:44

+0

@chok。是的,你可以打開訪問並嘗試在查詢 – 2011-05-16 15:47:03

+0

SELECT * FROM msysobjects'我感到困惑,而不是通過:從msysobjects選擇計數(*)..是否有任何替代品來驗證表中是否已存在MS Access DB ..通過共享一行語法access.DoCmd.TableExists(「drug」);像這樣的東西.. !! – goofyui 2011-05-16 15:49:34

0

這可以幫助在MS訪問使用C#。測試

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(); 
    } 
} 
相關問題