Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
4 / 4 / 5
Регистрация: 13.08.2014
Сообщений: 96

Промежуточные классы при работе с БД

31.01.2017, 09:50. Показов 1654. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
Столкнулся с таким вопросом, не знаю как лучше реализовать. Есть три класса Класс1, Класс2, Класс3, каждому классу соответствует таблица в базе данных таблица1, таблица2, таблица3..Все три класса содержать одно и то же поле number. По полю number, делаю выборку из базы данных (пользуюсь join), соотвественно получают выборку из базы данных в которой содержаться поля из класса1, класса2, класс3. Для вывода данных, нужно создавать Класс4, где находятся все поля Класс1, Класса2, Класса3 или есть какой то другое решение?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
31.01.2017, 09:50
Ответы с готовыми решениями:

Как вычеслить промежуточные X,Y при движение от А к Б
Есть начальная координата X,y и конечная endX и endY. Как вычеслить следующие координаты X,y при смещении на определенное растояние (пусть...

Исключение при работе с pictureBox (задание картинки при работе с формой)
Хочу задать изображение в компоненте pictureBox во время разработки формы, чтоб при запуске проги сразу отображалась картинка. Задаю...

Грабли при работе STM32f4 при работе с ftp
Столкнулся с такой проблемой. Работаю в связке Stm32f4+cinterion bgs2e8 при сливании файла с ftp, если в файле есть 0x00(NULL), а они...

11
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,259
31.01.2017, 09:52
Что-то не очень понятно в чём вопрос...
0
 Аватар для skilllab
296 / 236 / 58
Регистрация: 03.02.2011
Сообщений: 2,045
Записей в блоге: 1
31.01.2017, 11:14
Цитата Сообщение от Dour Посмотреть сообщение
соотвественно получают
Кто получает? Может не надо им ничего давать?
Цитата Сообщение от Dour Посмотреть сообщение
содержаться
содержаться в чём?
Цитата Сообщение от Dour Посмотреть сообщение
Для вывода данных, нужно создавать Класс4
Зачем? есть такая штука var
Попробуйте
C#
1
var result = база_данных.чего_то_там.Join(опять_чего_то_там)
Если VS подсветит строчку красненьким))) значит что-то не так. И ваша выборка нереализуема.
Цитата Сообщение от Dour Посмотреть сообщение
или есть какой то
"какой то" кто?
Цитата Сообщение от Dour Посмотреть сообщение
другое решение
"Класс1, Класс2, Класс3" сделать наследниками интерфейса. Получать выборку именно его. Далее конвертер полученной выборки в один "класс4"
0
 Аватар для Anklav
447 / 305 / 47
Регистрация: 23.01.2013
Сообщений: 661
31.01.2017, 12:37
Dour, какой библиотекой вы пользуетесь для взаимодействия с бд, просто ado.net или какой нибудь надстройкой над ним, например entity framework?

Вообще странно что у вас сразу нету класс4, обычно есть уже какая то сущность, которую и раскладывают по отдельным таблицам, а потом собирают назад.
0
4 / 4 / 5
Регистрация: 13.08.2014
Сообщений: 96
31.01.2017, 12:46  [ТС]
Лучше на примере объясню. В БД есть таблицы Таблица1, Таблица2, Таблица3, в которых есть поля:
Таблица1: number, name, lastname;
Таблица2: number, note, date;
Таблица3: number, type, adress.
В программе есть классы, с полями:
Класс1: Number, Name, LastName;
Класс2: Number, Note, Date;
Класс3: Number, Type, Adress;
Делаю запрос к базе данных
select t1.name, t1.lastname, t2.note, t2.date, t3.type, t3.adress from t1
inner join t2 on (t1.number=t2.number)
inner join t3 on (t1.number=t3.number) where t1.number = 1;

Получаю данные, в которых содержаться поля из трех классов.
Как лучше сохранить эти данные, для дальнейшей работы?
Создавать еще один класс, в котором содержаться поля из Класса1, Класса2, Класса3 ?
Нашел вариант использования коллекции Dictionary<string, Type> Class = new Dictionary<string, Type>()

Добавлено через 2 минуты
Пользуюсь, Mysql, пишу на C#
Возможно ошибся веткой
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
31.01.2017, 14:13
Dour,
В целом, реляционные базы данных и объектная модель плохо сочетаются между собой.
Поэтому вам придется чем-то пожертвовать.
Либо хорошо работать с СУБД, а внутри программы использовать слаботипизированные классы типа DataSet, DataTable, DataView и т.д. Также есть вариант LINQtoSQL.
Либо хорошо работать с ООП моделью, но тогда вы можете делать только простые запросы к БД типа Select, но без inner join. А все связи реализовывать уже внутри ваших классов. Также можно использовать EntityFramework, который по сути делает то же самое.

Ну а так, да, придется писать отдельный класс на каждый такой SQL запрос. Только смысла в этом особого нет. Пользы от ООП здесь не будет, зато будет лишний гемор по написанию отдельных классов на каждый чих.
0
4 / 4 / 5
Регистрация: 13.08.2014
Сообщений: 96
31.01.2017, 22:03  [ТС]
Спасибо, немного просветлили
0
16 / 16 / 6
Регистрация: 01.03.2014
Сообщений: 122
03.02.2017, 03:48
Доброго времени суток.
У меня такой подход к твоей теме. Есть данные, их делим на те которыми пользуемся в настоящий момент и те которые храним. За хранение отвечает полностью SQL, за пользование ты со своими классами. Допустим на пользовательской странице мне надо разместить следующую информацию (индекс, артикул, фото, описание, количество, размеры и пр.) для этого у меня есть класс (ПродуктВКаталоге) и соответсвующий ему класс для обращения к базе данных (чтение и записи инфы для ПродуктаВКаталоге). Информация для длительного хранения хранится в таблицах в базе данных, как, ты сам хочешь. Для удобства чтения и записи инфы в БД есть вьюхи и хранимые процедуры (это инструмент БД).
Для другой страницы/формы есть класс ПродуктПолностью, где отображается вся информация о сущность "Продукт". Реализовано наследование, т.е. абстрактный класс для данных clData и для чтения и отображения данных clStore. В них собраны общие для всех классов инструменты (public Id, protection string ConnectStr, protection string CommandSql, protection string ErrorSql)
Когда таким образом разделишь работу, то процесс создания конечного приложения ускорится. Грубо говоря ты на пару деньков погружаешься в SQL с его логикой, организуешь там всю информацию, готовишь ее к чтению и записи. Потом работаешь недельку с приложением.
Я считаю, что все выборки по условиям и прочая лобуда с обработкой данных должна быть реализована в запросах SQL. Зачем множить информацию запихивая ее в классы, зачем писать код для выборки по условию, сортировки данных и прочее, когда ученые диссертации защищали о том как лучше перебирать инфу. Поэтому надстройки для работы с данными (типа Ентити) не использую, а изучение sql потребуется не на много больше, чем для работы с такими надстройками.
0
4 / 4 / 5
Регистрация: 13.08.2014
Сообщений: 96
03.02.2017, 09:25  [ТС]
Просто есть такие приложения, в которых пользователь сам строит свои отчеты, то есть есть менюшка, он выбирает нужные поля(полей может быть много и из разных таблиц), делает элементарные условия и ему выдается готовый отчет. Вот мне интересен последний этап, как в таких приложениях реализован последний этап, когда происходит вывод отчета и формирования его.
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
03.02.2017, 10:17
Цитата Сообщение от Dour Посмотреть сообщение
Вот мне интересен последний этап, как в таких приложениях реализован последний этап, когда происходит вывод отчета и формирования его.
это динамический SQL. По большому счету - текст запроса формируется на клиенте и передается серверу. Самый грустный вариант для сервера
Да и в плане многопользовательской среды - все очень грустно будет
0
16 / 16 / 6
Регистрация: 01.03.2014
Сообщений: 122
07.02.2017, 06:59
Может проще пользователю установить Sql server manager, дать нужные права и пусть рулит?
0
Эксперт .NET
 Аватар для Usaga
14138 / 9367 / 1350
Регистрация: 21.01.2016
Сообщений: 35,259
07.02.2017, 07:09
Цитата Сообщение от BorisMar84 Посмотреть сообщение
Может проще пользователю установить Sql server manager, дать нужные права и пусть рулит?
Это самое последнее, что можно сделать, как в плане безопасности, так и в плане удобства пользователю...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.02.2017, 07:09
Помогаю со студенческими работами здесь

Нужны ли дополнительные классы в работе с формами
Здравствуйте форумчане, нужен чисто практический совет. Есть приложение для работы с базой данных (около 30 тыщ значений), состоящее из...

Аппаратная ошибка видео (Ошибка при работе с видеоустройствами привела к некорректной работе Windows).
Аппаратная ошибка видео. Последнее время во время игры Call of Duty: Modern Warfare 2 в мультиплеер, (между сменами карт, как только...

Нарушение прав доступа при чтении при работе с большим массивом
Здравствуйте. Пытаюсь заполнить большой массив, вроде правильно объявил его, но на разных итерациях (от i=92106 и выше ...) появляется...

ASUS K53S выключается при работе от батареи при низком разряде
У меня &quot;ASUS K53S&quot; под управлением ОС &quot;Windows 7 Ultimate x64&quot; (все драйвера установлены с офицыального сайта ASUS, есть антивирус, вирусов...

Ошибка при использовании ADODB.CONNECTION при работе с dbf-файлом
Добрый день! Написала макрос с использованием adodb.connection. макрос удаляет строки из файла dbf. На моем компьютере работает, поставила...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru