我正在使用2.0框架,我正在寻找一种通用方法来确定表中是否存在列。我想将此代码用于多种数据库类型和提供程序。
GetSchema方法将返回架构信息,但信息的格式和限制返回信息的数据似乎都是特定于提供程序的。
我见过的其他解决方案似乎归结为Select * from table,然后搜索结果以查看列是否存在。这样可行但是为整个表发出一个select以查看列是否存在似乎很疯狂。
答案 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在不返回任何数据的情况下查看列的名称。可能有更好的更通用的方法来查询数据库提供者的系统表,但我不知道。