我目前正在构建一个工作中的应用程序,用户可以在其中定义将数据路由到各种存储技术的各种方式。其中包括传统的关系数据库系统。
如果用户的配置方式与定义的数据库架构不匹配(即列类型不匹配),我们希望向用户提供反馈。
我一直在寻找一种与供应商无关的可靠方法来检索数据库表的数据类型,理想情况下包括它们映射到的clr类型。
到目前为止,我一直在努力寻找哪怕是一点像样的东西。我偶然发现的许多解决方案都不是供应商不确定的,而且.net(core)中包含的许多关于数据库技术的工具都是特定于sql server的。
最流行的方法似乎是通过GetSchema
对象上的IDbConnection
方法,但是这个方法也充满了实现特定的细节,并且不会给出非常好的使用结果。我已经能够检索每种类型的文本表示,例如对于postgres,我所得到的最接近的是这些类型的实际可读描述。VARCHAR
显示为“可变长度字符串”,很难解析。
大多数.net(core)的数据库交互库抽象出数据集、数据表、数据读取器等原语,通常直接映射到对象,从而消除了我对它们的任何使用。
获得表模式概述的最简单方法是什么?
为了清楚起见,我们现在希望支持以下数据库技术:
SQL服务器
PostgreSQL公司
MySQL/马里亚行
数据库
Oracle RDMBS
谢谢!
最佳答案
这听起来像是你必须支付的东西,因为它是一个如此狭窄的用例,如果它甚至存在。我很难相信这会是一个开源项目。
也就是说,您可以通过直接使用以下内容查询数据库来绕过它:
select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'
取自https://stackoverflow.com/a/18298685/1387545
我查过了,至少对前两个数据库有效。我认为找到某种sql查询是通用解决方案的最佳选择。因为sql是他们共享的技术。
但是,同样,我认为通过为每个数据库的数据库表构建自己的特定解析器,您将获得更好的结果。当然,这取决于时间和预算。
关于c# - 与供应商无关的检索数据库表模式的方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56893860/