Независимый от поставщика способ получения схемы таблицы базы данных - PullRequest
1 голос
/ 04 июля 2019

В настоящее время я работаю над созданием приложения, в котором пользователи могут определять различные способы направления фрагментов данных в различные технологии хранения.К ним относятся традиционные системы реляционных баз данных.

Мы хотели бы предоставить обратную связь пользователям, если способ их настройки не работает с определенной схемой базы данных, т.е. если типы столбцов не совпадают.

Я искал надежный, независимый от поставщика способ получения типов данных таблицы базы данных, в идеале включая типы CLR, с которыми они сопоставляются.

До сих пор я изо всех сил пытался найти что-нибудьдаже отдаленно приличный.Большая часть решений, на которые я наткнулся, не зависит от поставщика, и большая часть инструментов, касающихся технологий баз данных, включенных в .NET (Core), специфична для SQL Server.

Наиболее популярным способом, по-видимому, является GetSchema метод для IDbConnection объекта, но этот также пронизан деталями, специфичными для реализации, и не дает очень приятного в использовании результата.Я был в состоянии получить текстовые представления для каждого из типов, и для Postgres, например, самое близкое, что я пришел, - это реально читаемые описания типов.VARCHAR отображался как «символьная строка переменной длины», которую трудно проанализировать.

Большинство библиотек взаимодействия с базой данных для .NET (Core) абстрагируют такие примитивы, как DataSet, DataTable, DataReader и т. Д., И обычно напрямуюсопоставление с объектами, тем самым исключая любое использование, которое я мог бы использовать для них.

Какой самый простой способ получить обзор схемы таблицы?

Для ясности, мы ищемсейчас поддерживаются следующие технологии баз данных:

  • SQL Server
  • PostgreSQL
  • MySQL / MariaDB
  • SQLite
  • Oracle RDMBS

Спасибо!

1 Ответ

1 голос
/ 05 июля 2019

Это похоже на то, за что вы должны заплатить, потому что это такой узкий вариант использования, если он вообще существует.Мне трудно поверить, что это будет поддерживаемый проект с открытым исходным кодом.

Когда это сказано, возможно, вы можете обойти это, запросив базу данных напрямую, используя что-то вроде этого:

select *
from INFORMATION_SCHEMA.COLUMNS
where TABLE_NAME='tableName'

Взято из https://stackoverflow.com/a/18298685/1387545

Я проверил, и, похоже, работает как минимум для первых двух баз данных.Я думаю, что поиск какого-либо SQL-запроса - ваш лучший выбор для универсального решения.Поскольку SQL - это технология, которой они делятся.

Но опять же, я думаю, вы получите лучший результат, создав собственный анализатор для таблиц базы данных для каждой базы данных.Конечно, все зависит от времени и бюджета.

...