Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5

Соответствие данных

30.08.2018, 10:23. Показов 1146. Ответов 11

Студворк — интернет-сервис помощи студентам
Приветствую, ребята. Подскажите пожалуйста, как реализовать такую штуку.
Имеется БД, делаю выборку из таблиц. Одно поле имеет перечислительный тип, но в БД он хранится не совсем лаконичном виде для пользователя. Как задать соответствие (псевдонимы), чтобы пользователю отображалось в человеческом виде, но тем не менее, можно было бы совершать операции с БД (поиск, сортировку).
БД состоит из нескольких таблиц (одна из таблиц как раз хранит перечислительный тип), итоговый результат для данных записываю в коллекцию.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.08.2018, 10:23
Ответы с готовыми решениями:

Поиск на соответствие
Есть access база (ну базой ее назвать сложно, т.к. состоит она из одной таблицы) в ней 4 поля ("№"-счетчик, "User",...

Выдает ошибку о не соответствие типов
OleDbExpression = string.Format("INSERT INTO KALK (NOMER, ADRES, REG_N, PRORAB, KOD_ZAK, TIP_ZV, RAZRAD) VALUES ({0}, {1}, {2}. {3}, {4},...

Соответствие строк DataTable и DataGridView
Добрый день. Есть связанные DataTable и DataGridView, зная номер строки в DataGridView как определить номер этой же строки в DataTable?...

11
 Аватар для Immo
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
30.08.2018, 10:29
На строчку бы посмотреть, как выглядит и как бы хотели
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
30.08.2018, 10:39  [ТС]
Цитата Сообщение от Immo Посмотреть сообщение
На строчку бы посмотреть, как выглядит и как бы хотели
Что вы имеете ввиду ? Например, данные в таблице соответствий представлены так:
"_$Session$_.Start"
"_$Session$_.Finish"
"_$Transaction$_.Begin"
"_$Transaction$_.Commit"

Вот хотелось бы сделать так, чтобы пользователю выводились не эти строчки, а заведомо созданные мной соответствия, например:
"_$Session$_.Start" - "начало сессии"
"_$Session$_.Finish" - "завершение сессии"

Я так думаю, что можно просто создать еще одну колонку, в которой отображать псевдоним. Колонку с реальными данными "прятать", а отображать колонку с псевдонимом. Вот только не пойму, как создать соответствие.
0
911 / 796 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
30.08.2018, 10:57
Почтальон, если данные на отображение идут через DataSource то там есть 2 параметра обычно: как показывать, и какое значение, т.е их и нужно сделать, как пример о чём речь есть вот такой с Enum в комбобокс:
сама Enum:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
public enum CollectPeriodsEnum
    {
        [Description("Час")]
        Hour = 0,
        [Description("День")]
        Day = 1,
        [Description("Неделя")]
        Week = 2,
        [Description("Месяц")]
        Month = 3,
        [Description("Год")]
        Year = 4
    }
как выводится в comboBox:
C#
1
2
3
4
5
6
7
8
9
10
11
comboBox.DataSource = Enum.GetValues(typeof(CollectPeriodsEnum)).Cast<Enum>()
                .Select(value => new
                {
                    (Attribute.GetCustomAttribute(value.GetType().GetField(value.ToString()),
                        typeof(DescriptionAttribute)) as DescriptionAttribute).Description,
                    value
                })
                .OrderBy(item => item.value)
                .ToList();
                comboBox.DisplayMember = "Description";
                comboBox.ValueMember = "value";
думаю что-то такого и с базой можно замутить

Добавлено через 5 минут
p.s. т.е иметь класс в котором будет Описание и Значение и выводить юзеру описание, а внутри использовать значение
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
30.08.2018, 11:19  [ТС]
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
если данные на отображение идут через DataSource
Нет, данные получаю запросом.
Цитата Сообщение от SeIZVeIZ Посмотреть сообщение
p.s. т.е иметь класс в котором будет Описание и Значение и выводить юзеру описание, а внутри использовать значение
тоже так думаю, проще создать еще одно поле, в которое записывать псевдоним, его пользователю и отображать.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
31.08.2018, 01:50
Почтальон, это вопрос скорее по SQL чем C#. Конкретное решение зависит от типа БД. В MS SQL это можно сделать используя CASE ... WHEN
T-SQL
1
2
3
4
5
6
7
8
9
10
SELECT 
    UserFriendlyText = CASE
        WHEN NonFriendlyText = '_$Session$_.Start' THEN 'начало сессии'
        WHEN NonFriendlyText = '_$Session$_.Finish' THEN 'завершение сессии'
        WHEN NonFriendlyText = '_$Transaction$_.Begin' THEN 'начало транзакции'
        WHEN NonFriendlyText = '_$Transaction$_.Commit' THEN 'завершение транзакции'
        ELSE NonFriendlyText -- На случай отсутствующего описания
    END,
    ...
FROM TableName
1
Эксперт .NET
 Аватар для Usaga
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,406
31.08.2018, 04:13
Почтальон, перечисления (не важно, в C# или в SQL) принято организовывать с помощью чисел. Описание можно делать так, как выше показал SeIZVeIZ. В базе перечисления принято делать числами-внешними ключами на таблицу перечисления. Т.е. сам ID записей из таблицы перечислений должны соответствовать значениями Enum-а в коде, а в самой таблице может храниться человекочитаемое описание перечисления вместе с алиасами и всем прочим.

Т.е. при выборке вам просто нужно будет сделать LEFT\INNER JOIN таблицы с перечислением и таблицы с описанием этого перечисления.
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
31.08.2018, 07:58  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Т.е. при выборке вам просто нужно будет сделать LEFT\INNER JOIN таблицы с перечислением и таблицы с описанием этого перечисления.
Именно так и делаю, левым соединением к таблице с соответствиями. Но они в БД хранятся не совсем удобном виде для пользователя, а модифицировать БД нет смысла в этой ситуации, ввиду того, что это файлики SQLite, т.е. делаю подобие читалки логов для пользователя
0
 Аватар для Kazbek17
1484 / 939 / 454
Регистрация: 06.02.2012
Сообщений: 2,868
31.08.2018, 16:13
Почтальон
Для SQlite так
SQL
1
2
3
4
5
6
SELECT *,  
    CASE 
    WHEN condition = 'Value' THEN 'NewValue'
        ELSE 'Null'
    END AS 'Column'
    FROM [TableName]
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
03.09.2018, 08:13  [ТС]
Kazbek17, это конечно хорошее решение "на лету", но что делать, если потребуется отбор по этим псевдонимам ?
Я так предполагаю, проще создать класс и при чтении "заворачивать" значения в этот класс.
0
Эксперт .NET
 Аватар для Usaga
14307 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,406
03.09.2018, 08:14
Цитата Сообщение от Почтальон Посмотреть сообщение
но что делать, если потребуется отбор по этим псевдонимам ?
Завернуть запрос в подзапрос.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
03.09.2018, 08:59  [ТС]
Usaga, да нее, думаю сделать словарь, в который будет грузиться ID и соответствие (человеко-читаемое). Потом тупо по ID элемента делать запрос с отбором.
Цитата Сообщение от Usaga Посмотреть сообщение
Завернуть запрос в подзапрос.
Думаю это не эффективно, проще использовать Join
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.09.2018, 08:59
Помогаю со студенческими работами здесь

Хранимая процедура проверки XML на соответствие схеме
Доброго времени суток, помогите пожалуйста с хранимой процедурой. На вход поступают путь к Xml файлу и путь к xsd схеме, в итоге должно...

Проверка Входных данных на соответствие
Нужно чтобы если Входной символ Symbol не (+, -,*,/) то компилятор писал об этом как ошибка ? public static L1 Operation(L1 M, Char...

Проверка на соответствие
Необходимо сделать проверку на соответствие маски фразы, маска вида asd*фывд? где * - любое количество любых символов, а ? - любой один...

GetPixel не соответствие цветов
Доброго времени суток. В общем ситуация такая, я создаю bitmap, попиксельно заполняю его тремя разными цветами,белым,синим и черным. Потом...

Проверка регулярного выражения на полное соответствие строке
Здравствуйте! Есть регулярное выражение для MAC-адреса: &quot;({2}(|$)){6}$|({4}(|$)){3}&quot;. Как мне проверить точное совпадение строки с этим...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru