删除表的最快方法(如果存在)

时间:2015-04-06 13:40:15

标签: c# ms-access dao

我使用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); } 
  }
}

对于任何可能偶然发现这种情况的未来旅行者来说,这是我使用的最终语法---指数更快!!!

Last EDIT ---我将Execute语句更改为封装在try/catch块中,就好像数组中列出的表名实际上不存在一样,它会抛出错误。< / p>

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();

3 个答案:

答案 0 :(得分:2)

反转循环(伪代码):

foreach (DAO.TableDef tabledef in dd.TableDefs)
{
  if (tabledef.Name in tablearray )
  { 
    dd.TableDefs.Delete(strtable); 
  } 
}

答案 1 :(得分:1)

我认为不是检查C#应用程序运行以下查询与您的ado.net。

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

因为它会在您使用ado.net时加载元数据,而不是使用执行非查询执行简单查询。

答案 2 :(得分:-2)

您可以使用Drop Table删除表格。 它的语法是

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

有关详细信息,请使用此link

检查this link also