Я использую 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); }
}
}
Для будущих путешественников, которые могли бы наткнуться на это, это был мой последний синтаксис, который я использовал --- Экспоненциально быстрее !!!
Последний EDIT --- Я изменил оператор 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
Почему вы не можете написать простой запрос, который проверяет существование sysobject – MethodMan
@MethodMan, в раскрывающемся списке уже проверяется, существует ли сущность, поэтому проверка его существования до этого двойная проверка, следовательно, не быстрее. Если он не планирует делать что-то особенное, если таблица существует или не существует, проверка просто замедляет процесс. – Franck