我目前正在工作中构建一个应用程序,用户可以在其中定义将数据片段路由到各种存储技术的各种方式。其中包括传统的关系数据库系统。
如果用户的配置方式不适用于定义的数据库架构,即如果列类型不匹配,我们希望向用户提供反馈。
我一直在寻找一种与供应商无关的可靠方法来检索数据库表的数据类型,最好包括它们映射到的 CLR 类型。
到目前为止,我一直在努力寻找任何像样的东西。我偶然发现的许多解决方案都与供应商无关,并且 .NET (Core) 中包含的许多与数据库技术相关的工具都是特定于 SQL Server 的。
最流行的方法似乎是通过 IDbConnection
对象上的 GetSchema
方法,但那个方法也充满了具体实现的细节,并没有给出一个非常使用效果令人愉快。我已经能够检索每种类型的文本表示,例如对于 Postgres,我最接近的是对类型的实际人类可读描述。 VARCHAR
显示为“变长字符串”,难以解析。
.NET (Core) 的大多数数据库交互库都抽象出 DataSet、DataTable、DataReader 等基元,并且通常直接映射到对象,从而消除了我对它们的任何使用。
获得表架构概览的最简单方法是什么?
为清楚起见,我们目前希望支持以下数据库技术:
- SQL Server
- PostgreSQL
- MySQL/MariaDB
- SQLite
- 甲骨文 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/