我正在使用C#連接到訪問數據庫並檢查數據庫中是否存在表。這是我正在使用的語法,但對於其中有很多表的數據庫,執行需要一段時間。他們是一個更快的方法來做到這一點,因爲速度是這個過程最重要的事情?刪除表的最快方法(如果存在)
string[] tableNames = new string[4] { "One", "Two", "Three", "Four" };
for (int q = tableNames.GetLowerBound(0); q <= tableNames.GetUpperBound(0); q++)
{
foreach (DAO.TableDef tabledef in dd.TableDefs)
{
string strtable = tableNames[q];
if (tabledef.Name == strtable) { found = true; }
if (found) { dd.TableDefs.Delete(strtable); }
}
}
對於任何未來的旅行者誰可能偶然發現這一點,這是我使用的最後語法---指數更快!
上次修改---我改變了Execute
語句,將其封裝在try/catch
塊中,就好像數組中列出的表名實際上不存在一樣,它會拋出錯誤。
System.Data.OleDb.OleDbConnection oleconn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + PathToDatabase" + ".mdb;");
oleconn.Open();
string[] tableNames = new string[4] { "One", "Two", "Three", "Four" };
for (int q = tableNames.GetLowerBound(0); q <= tableNames.GetUpperBound(0); q++)
{
System.Data.OleDb.OleDbCommand cmd = new OleDbCommand("DROP TABLE " + tableNames[q], oleconn);
try { cmd.ExecuteNonQuery(); }
catch {}
}
oleconn.Close();
簡單運行'DROP TABLE [Tablename]'它會刪除,如果存在,否則什麼都不做 – Franck 2015-04-06 13:41:48
爲什麼你不能寫一個簡單的查詢來檢查sysobject是否存在 – MethodMan 2015-04-06 13:44:00
@MethodMan drop table已經檢查實體是否存在,因此檢查它是否存在雙重檢查,因此不會更快。除非他打算做一些特殊的事情,如果表格存在或不存在,檢查只會減慢過程。 – Franck 2015-04-06 13:47:40