Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
确定ADO.NET中是否存在列的通用方法_.net_Ado.net - Fatal编程技术网

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

确定ADO.NET中是否存在列的通用方法,.net,ado.net,.net,Ado.net,我正在使用2.0框架,我正在寻找一种通用方法来确定表中是否存在列。我想将此代码用于多种数据库类型和提供程序 GetSchema方法将返回模式信息,但信息的格式和限制返回信息的数据似乎都是特定于提供者的 我看到的其他解决方案似乎归结为从表中选择*,然后搜索结果以查看该列是否存在。这将起作用,但对整个表发出select以查看是否存在列似乎很疯狂。我可以马上想到两个选项: 最好使用作为sql标准一部分的信息模式视图,但并非所有数据库系统都实现它们。但是,如果您关心的数据库集确实实现了它,那么这就是您的

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

GetSchema方法将返回模式信息,但信息的格式和限制返回信息的数据似乎都是特定于提供者的


我看到的其他解决方案似乎归结为从表中选择*,然后搜索结果以查看该列是否存在。这将起作用,但对整个表发出select以查看是否存在列似乎很疯狂。

我可以马上想到两个选项:

最好使用作为sql标准一部分的信息模式视图,但并非所有数据库系统都实现它们。但是,如果您关心的数据库集确实实现了它,那么这就是您的最佳选择

另一个选项是接受查询,但在其上添加一个“WHERE 1=0”子句,这样它就不会返回任何行。在这种情况下,ADO.NET仍将返回模式

EDIT:实际上,第二个方法将提供列及其数据类型的存在性。但是,我不确定您是否能够获得完整的模式信息,如最大长度、可空值等。模式视图中的信息确实是最好的选择,但ORACLE没有实现它们

我确实遇到过这样的情况:


这是一项在Oracle中模拟信息模式视图的开源工作。在这一点上,我不知道这项工作的完整性和功能性

我可以马上想到两个选择:

最好使用作为sql标准一部分的信息模式视图,但并非所有数据库系统都实现它们。但是,如果您关心的数据库集确实实现了它,那么这就是您的最佳选择

另一个选项是接受查询,但在其上添加一个“WHERE 1=0”子句,这样它就不会返回任何行。在这种情况下,ADO.NET仍将返回模式

EDIT:实际上,第二个方法将提供列及其数据类型的存在性。但是,我不确定您是否能够获得完整的模式信息,如最大长度、可空值等。模式视图中的信息确实是最好的选择,但ORACLE没有实现它们

我确实遇到过这样的情况:


这是一项在Oracle中模拟信息模式视图的开源工作。在这一点上,我不知道这项工作的完整性和功能性

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

select * from table
where true=false

这将允许ADO查看列的名称,而不返回任何数据。可能有一种更通用的方法可以通过数据库提供者查询系统表,但我不知道。

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

select * from table
where true=false

这将允许ADO查看列的名称,而不返回任何数据。可能有一种更通用的方法可以通过数据库提供者查询系统表,但我不知道。

在这种情况下,我不需要完整的模式信息。我只是在尝试实现一个通用的bool FieldExists(string tableName)方法。我喜欢尝试向管理层解释SQL标准如何不是真正的标准,因为在不同的数据库中实现了很多不同的标准,或者根本没有实现。这就是为什么我对在Oracle上实现信息模式的项目感兴趣。甲骨文是一个很大的例外,但它真的不应该那么难实现。Oracle只在一组自定义的表/视图中提供所有这些信息。这实际上只是一些人花时间实际构建视图以将数据转换为正确的模式的问题。我不认为Firebird支持信息模式,这是我的主要目标之一。不是的SQL标准。在本例中,我不需要完整的架构信息。我只是在尝试实现一个通用的bool FieldExists(string tableName)方法。我喜欢尝试向管理层解释SQL标准如何不是真正的标准,因为在不同的数据库中实现了很多不同的标准,或者根本没有实现。这就是为什么我对在Oracle上实现信息模式的项目感兴趣。甲骨文是一个很大的例外,但它真的不应该那么难实现。Oracle只在一组自定义的表/视图中提供所有这些信息。这实际上只是一些人花时间实际构建视图以将数据转换为正确的模式的问题。我不认为Firebird支持信息模式,这是我的主要目标之一。不是的SQL标准。这个解决方案就是我实际实现的。我将Clyde的解决方案标记为已被接受的解决方案,因为他确实提到了这个解决方案和可能对某些人更好的信息模式。这个解决方案就是我实际实现的。我将Clyde的解决方案标记为已被接受的解决方案,因为他确实提到了这个解决方案和可能对某些人更好的信息模式。