簡體   English   中英

使用 C# OleDB 連接檢查訪問數據庫中是否存在某個表

[英]Check for existence of a certain table in access DB using C# OleDB connection

我正在努力為我想要找到的東西找到一個有效的答案。 基本上,我想檢查是否:

“tableNO1”存在或者如果所有其他表都存在...

順便說一句,如果有幫助的話,我正在使用 Access 2002-2003:) 你認為我應該升級到最新版本嗎?

背景:我正在嘗試創建運行時按鈕,每個按鈕都有一個數據庫表,當我關閉我的程序時,我為每個運行時創建的按鈕創建的表將被保存。 再次啟動程序后,我應該單擊一個按鈕,該按鈕將添加這些具有數據庫表的按鈕(每個按鈕都有一個專用表)。 例如,如果之前在程序中創建了 9 個運行時按鈕 - 每個按鈕都有一個數據庫表。 我將有一個最多 9 個按鈕,每個按鈕都將被命名為 tableNO(n) n=number of table 當我第一次單擊創建運行時按鈕的按鈕時,它將創建一個名為“tableNO1”的按鈕,第二次將創建“tableNO2”,依此類推...

提前致謝。

好的,有幾種方法可以做到這一點,但我建議使用以下代碼:

   public Boolean TableExist(string sTable)
    {
        using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB2))
        {
            conn.Open();
            string[] sRestrict = new string[] {null,null,null,null};
            sRestrict[2] = sTable;
            DataTable MySchema = new DataTable();
            MySchema = conn.GetSchema("Columns",sRestrict);

            return (MySchema.Rows.Count > 0);
        }
    }

以上也是如何將模式(表 def)作為表獲取的方法。

因此,說

if (TableExist("tblHotels")
{
     // your code here
}

現在,因為您可能(可能)使用循環,那么出於性能原因,您可能會考慮將有效連接傳遞給 TableExist function,因此您的循環不會每次都重新創建連接 - 因為這會減慢速度下降了不少。

請注意,“許多”通常建議這樣做:

SELECT * FROM MSysObjects WHERE [Name] = 'tableNO1' AND Type = 1

上面的問題是默認情況下,MySysObjects 需要提升的權限。 可以打開數據庫,然后使用安全設置訪問 MySysOjbects 的權限可以更改 - 但它比上面的代碼/函數更有效。

暫無
暫無

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

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