确定ADO.NET中是否存在列的通用方法

时间:2009-05-18 16:50:15

标签: .net ado.net

我正在使用2.0框架,我正在寻找一种通用方法来确定表中是否存在列。我想将此代码用于多种数据库类型和提供程序。

GetSchema方法将返回架构信息,但信息的格式和限制返回信息的数据似乎都是特定于提供程序的。

我见过的其他解决方案似乎归结为Select * from table,然后搜索结果以查看列是否存在。这样可行但是为整个表发出一个select以查看列是否存在似乎很疯狂。

2 个答案:

答案 0 :(得分:3)

我可以立即想到两个选项:

使用属于sql标准的INFORMATION_SCHEMA视图会很好,但并非所有数据库系统都实现它们。但是,如果您关心的数据库集实现了它,那么这是您的最佳选择。

另一种选择是接受您的查询,但在其上添加“WHERE 1 = 0”子句,以便它不返回任何行。在这种情况下,ADO.NET仍会返回架构

编辑:实际上,第二种方法将为您提供列及其数据类型的存在。但是,我不确定你是否会获得完整的架构信息,如最大长度,NULLable等.INFORMATION_SCHEMA视图确实是最好的选择,但是ORACLE没有实现它们。

我确实遇到过这个问题:

http://database-geek.com/2009/04/30/oracle-information_schema/

这是一个在Oracle中模拟INFORMATION_SCHEMA视图的开源工作。我不知道此时此工作的完整性或功能性。

答案 1 :(得分:2)

而不是从表中选择*,而不是:

select * from table
where true=false

这将让ADO在不返回任何数据的情况下查看列的名称。可能有更好的更通用的方法来查询数据库提供者的系统表,但我不知道。