|
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 14
|
||||||
Проблема с классом для работы с базой данных21.10.2021, 18:57. Показов 1726. Ответов 6
Всем доброго времени суток!
Написал класс для работы с базой данных, но есть проблема - публичное поле Dataset'a. Я знаю, что так делать плохо. При использования метода Select приходится для выбора значения обращаться таким образом Database.ds.Tables[0].Rows[0][0].ToString(); — как решить данную проблему? Если просто записывать в переменную значение, то вернется DataTable и его никак перебрать не получается. Может можно какой-нибудь метод написать для более правильного выполнения запроса и возврата данных? Про ExecuteNonQuery тоже слышал, что лучше не юзать, но по другому не додумался - буду рад услышать любые замечания и улучшения. Код класса прилагаю ниже
В методе Insert() опечатка c PreBuildedQuery - редактировал недавно файл и не везде возможно заменил, уже исправил
0
|
||||||
| 21.10.2021, 18:57 | |
|
Ответы с готовыми решениями:
6
Хостинг для работы с базой данных Программа для работы с базой данных Программа для работы с базой данных |
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 21.10.2021, 19:26 | |
|
Все, что Вы понаписывали, в печку !
Работа с СУБД заключается в двух "ипостясях" - модели, отражающие сущности, хранящиеся в Базе данных (таблицы или результаты выборки) и контексте/репозитории, содержащем (инкапсулирующем) методы для обмена данными с БД. Первые используются для манипулирования информацией (например - отображения), вторые - для получения моделей или внесения через эти самые модели изменений в таблицы БД. Сами модели у Вас просто отсутствуют, вместо них в методах класса, названного Вами "как с бодуна" Database, упоминаются какие-то мутные конструкции, претендующие на какую-то "универсальность". Весь этот жуткий коктейль должен якобы работать непонятно с чем и непонятно как. Опять же использование адаптеров и тэйблов без всякого понятия а что это такое и для чего они, собственно, нужны. И те, и другие используются в самом клиентском коде, связанным с интерфейсом и никого прямого отношения в БД не имеют. Зачем пихать их в класс БД, который по идее должен быть совершенно независим от интерфейса ?
0
|
|
|
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 14
|
|
| 21.10.2021, 19:29 [ТС] | |
|
Ну то есть хотите сказать, что в классе для работы бд не должно быть никаких адаптеров и команд, а построено должно быть все чисто на абстракциях? Ну про модели я знаю, но пока не разбирался подробнее как с ними в сишарпе работать. Как в шараге научили, то я и написал, улучшив в пару раз
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
||
| 21.10.2021, 19:40 | ||
|
Если это некий класс, который умеет работать с произвольными, неизвестными заранее базами данных, то Ваша задумка - фикция, утопия. Если же Вы имеете в виду конкретную БД, то для работы с ней, повторюсь, нужны : а) модели, б) имплементация. Первые - абстрактные, вторые - вполне себе конкретные, но работающие с абстрактными моделями. Добавлено через 5 минут Вы путаете адаптер (xxxAdapter) с командами (xxxCommand). Очевидно, Вас ввели в заблуждение "уроки", которые Вы, не поняв сути, просто скоммуниздили в свой проект, не потрудившись прочитать что это за классы и для чего они используются. xxxCommand безусловно используется в имплементации, xxxAdapter - безусловно нет. Неужели Вам надо объяснять почему ?
0
|
||
|
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 14
|
|
| 21.10.2021, 19:41 [ТС] | |
|
Понял. Большое Вам спасибо. Буду разбираться с моделями и имплементациями, может и получится что-то дельное
0
|
|
|
0 / 0 / 0
Регистрация: 10.02.2021
Сообщений: 14
|
|
| 21.10.2021, 19:46 [ТС] | |
|
Ну и от того что я прочитаю про данные классы - научусь ли я ими пользоваться уже другой вопрос
![]() Так что можете объяснить, пожалуйста, если хотите
0
|
|
|
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
|
|
| 21.10.2021, 19:58 | |
Сообщение было отмечено sometimes_ago как решение
Решение
Грубо говоря, есть два способа организации приложения для работы с базами данных
1. "Ручной" Никаких классов, никаких абстракций. Все пишется в коде обработчиков событий формы. Данные читаются из БД и суются в тэйбл и адаптер, который привязывается к гриду. На выходе имеем грид, который редактируем и внесенные изменения заносятся в таблицу БД. Приложение даже может работать. Для курсача или лабы вполне сойдет. Для реального проекта, особенно для работы в многопользовательском режиме - сплошные грабли с колдобинами - кол придется мощно править - увеличив его в итоге примерно втрое-впятеро. 2. "Правильный" Приложение ничего не знает ни о какой "базе", "таблицах" и прочих пирогов с капустой. Оно работает с абстракциями (моделями), которые может отображать где-то (грид, листвью, комбобокс и т.д.) и которыми обменивается через методы некоего класса (репозитория, контекста). Для получения списка моделей (например для грида) используется один метод, для получения одной модели (как правило, по id) - другой, для передачи измененной модели для внесения в БД - третий, для добавления новой модели - четвертый и т.д. Класс репозитория (контекста) ничего не знает ни о каких графических элементах и вообще ничего, что делается с извлеченными им данными в формах приложения. В его обязанность входит получение от сервера и передача этих данных программе или получение их от программы для внесения изменений в таблицы БД на сервере.
0
|
|
| 21.10.2021, 19:58 | |
|
Помогаю со студенческими работами здесь
7
Класс для работы с базой данных Приложение для работы с базой данных
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
|
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y
Z4Tv2zpXVVo
https:/ / github. com/ shumilovas/ med2. git
|
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|