我使用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();
答案 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