[英]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.