Возможно ли отправить в БД тип данных object?

138
17 апреля 2022, 18:00

Всем доброго суток, я новичок в программировании, поэтому прошу строго не судить. Вопрос заключается в том, что возможно ли отправить тип данных object в БД? Если да, то подскажите как, пожалуйста. Язык программирования C#.

Начнем с того, что пытаюсь написать API по шаблону https://github.com/OPCFoundation/UA-.NETStandard . Удачно получается вывести все теги с OPC на консоль. Но теперь нужно записать все теги которые выводятся на консоль в базу банных phpmyadmin. Теги пишутся в виде название тега, значение, времени записи и состояния связи. По картинке видно, что значение тега класс типа object. Что нужно сделать, чтобы можно было значение тега отправить в базу?

Answer 1

Я думаю, что в общем случае короткий ответ звучит как "нет".

Попробуем разобраться в причинах. Типы данных в .NET - это классы и структуры, которые, как утвержает документация от MS, "инкапсулируют набор данных и поведений в одной логической сущности. Данные и поведение являются членами класса или структуры. К ним относятся методы, свойства, события и другие элементы"

То есть, грубо говоря, во первых в классе есть не только поля данных, но и методы, которые могут быть весьма и весьма неожиданными. Например, метод

    public DateTime GetNow() { return DateTime.Now; }

всегда возвращает другое значение, чем при прошлом вызове.

А такая структура данных, как "двусвязанный список" хранит в каждом элементе ссылки на предыдущий и последующий элементы.

И все эти возможности могут присутствовать в object - типе данных.

Но не всё так грустно. Первой приятной особенностью может стать то, что если объект поддерживает сериализацию (гуглить "атрибут Serializable"), то его, по меньшей мере, можно "запихнуть в поток байтов". С потоком байтов можно сделать уже много чего, в частности, записать в файл или бинарное поле базы данных.

Но это, как говорил Остап Бендер "Низкий сорт! не чистая работа". Следующей штукой, которая облегчает работу с типами произвольной природы, является Reflection. Это - механизм, который испольузется для получения типа из существующего объекта и вызова его методов или доступа к его полям и свойствам. То есть, грубо говоря, при помощи reflection можно у произвольного объекта перебрать все поля и узнать их имена и значения. А птоом что нибудь с ним сделать - например, сохранить.

А базы данных бывают разные. Типичный их представиель - это реляционные базы данных, которые развиваются много лет и очень привычны. Они хороши тем, что для "набора объектов одного типа" есть соответсвующая абстракция "таблица", а для "поля объекта" есть абстракция "столбец таблицы". И отображение полей объекта на колонки таблицы является для таких баз естественным (и его реализуют "автоматически" так называемые ORM - фреймворки).

А есть так называемые NoSQL - базы. Например, MongoDB. Для таких баз естественным способом хранения объектов является их сериализация в json, и идеология дальнейшей работы с объектами, сохраненными в базе, построена на доступе к отдельным полям этого json'а.

Ну, и на самой дальней ветке этого дерева находятся такие штуки, как redis. Про который одни говорят, что это база данных, а другие - что это key-value хранилище. То есть, грубо говоря, база данных "с одной таблицей, в которой есть одна колонка, и та - бинарная". Зато - очень быстро работает!

Теперь, когда у Вас есть выбор из этих возможностей и инструментов, Вы можете сознаительно наложить на object какие то ограничения и использовать их для сохранения состояния объекта в подходящую базу данных.

READ ALSO
Значение из строки n, столбца m DataGrid записать в переменную

Значение из строки n, столбца m DataGrid записать в переменную

Есть DataGrid, в одном из столбцов всегда хранится одно и то же числовое значениеКак это самое значение записать в переменную типа int? Знаю, что...

195
Как "сдвинуть" коллекцию от n до m элементов?

Как "сдвинуть" коллекцию от n до m элементов?

У меня есть форма с кнопками "вперед" и "назад" условноПри нажатии на кнопку вперед, показываются следующие 5 элементов коллекции...

213