2015-04-06 2 views
1

Я использую 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(); 
+4

просто запустить 'DROP TABLE [Tablename]' будет удаляться, если в противном случае ничего не делает – Franck

+0

Почему вы не можете написать простой запрос, который проверяет существование sysobject – MethodMan

+0

@MethodMan, в раскрывающемся списке уже проверяется, существует ли сущность, поэтому проверка его существования до этого двойная проверка, следовательно, не быстрее. Если он не планирует делать что-то особенное, если таблица существует или не существует, проверка просто замедляет процесс. – Franck

ответ

1

Я думаю, вместо того, чтобы проверять приложение C#, выполните следующий запрос с вашим ado.net.

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
    DROP TABLE 'mytablename' 

Поскольку она будет загружать мета-данные при использовании ADO.NET вместо этого выполнить простой запрос с выполнить запрос нон.

+2

Я не знал, что OBJECT_ID и этот синтаксис могут использоваться против базы данных MS-Access. Но учитывая тот факт, что плакат принял ваш ответ, я, вероятно, ошибаюсь. – Steve

+2

(cc: @Steve) Это код T-SQL. Он не будет работать с Access SQL. –

+0

@GordThompson Uhm, как и ожидалось – Steve

-2

Вы можете использовать Drop Table для удаления таблицы .. и его синтаксис

if exists (select * from login where name = 'prishu' and pass='prishu') 
    drop table login 

для получения дополнительной информации используйте эту link

чек this link also

+0

Мы говорим о базе данных MS-Access. Вы пробовали этот синтаксис? – Steve

+0

Этот синтаксис не работает. –

2

Reverse петли (псевдо код):

foreach (DAO.TableDef tabledef in dd.TableDefs) 
{ 
    if (tabledef.Name in tablearray) 
    { 
    dd.TableDefs.Delete(strtable); 
    } 
} 
Смежные вопросы