有没有办法使用 ADO.NET 来确定与任何数据提供程序一起使用的数据库中是否存在表?
有没有办法使用 ADO.NET 来确定与任何数据提供程序一起使用的数据库中是否存在表?
我目前正在做这样的事情:
bool DoesTableExist(string tableName)
{
DbCommand command = this.dbConnection.CreateCommand();
command.CommandText = "SELECT 1 FROM " + tableName;
try
{
using (DbDataReader reader = command.ExecuteReader())
{
return true;
}
}
catch (DbException)
{
return false;
}
}
我希望有一种不涉及捕获异常的方法。
Is there an way using ADO.NET to determine if a table exists in a database that works with any data provider?
I'm currently doing something like this:
bool DoesTableExist(string tableName)
{
DbCommand command = this.dbConnection.CreateCommand();
command.CommandText = "SELECT 1 FROM " + tableName;
try
{
using (DbDataReader reader = command.ExecuteReader())
{
return true;
}
}
catch (DbException)
{
return false;
}
}
I'm hoping that there is a way that doesn't involve catching exceptions.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
那么,您可以使用
Connection.GetSchema("TABLES")
方法。这将返回一个
DataTable
,其中包含数据库中所有表的行。从这里您可以检查该表是否存在。然后可以更进一步:
如果您使用 .NET 3.5,那么您也可以将其设为扩展方法。
Well, you can use the
Connection.GetSchema("TABLES")
method.This returns a
DataTable
which will contains rows of all the tables in your DB. From here you can check against this and see if the table exists.This can then be taken a step further:
If you're using .NET 3.5, then you can make this an extension method as well.
对凯尔的答案进行了小改进,以考虑不同的数据库(例如 oracle 与 ms-sql-server)将表名列放置在“表”表中的不同索引中:
Small improvement on Kyle's answer to account for the fact that different databases (oracle vs ms-sql-server for instance) place the table-name column in a different index in the "Tables" table: