首页 文章

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

提问于
浏览
1

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

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

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

2 回答

  • 2

    我能想到的两个选择:

    使用作为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视图的开源工作 . 我不知道此时此工作的完整性或功能性 .

  • 3

    您可以执行以下操作,而不是从表格中选择*:

    select * from table
    where true=false
    

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

相关问题