Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458

Ошибка неявного преобразования DBNull и Guid

25.12.2020, 12:00. Показов 3142. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Помогите какнибудь попроще и локаничнее написать передачу значения параметру при записи в бащу данных. Нужна проверка, что значение не null и в зависимости от этого записывать нулевое значение или формировать guid.
C#
1
db.AddParametersValue(cm, "@PARAM", textedit.Properties.Value == null ? DBNull.Value : Guid.Parse(textedit.Properties.Value.ToString())
При выполнении выдает ошибку, что не удается определить тип условного выражения, так как неявного преобразовария между System.DBNull и System.Guid не существует. Если записать выражение через if, то можно передавать либо нулевое значение, либо гуид, но это несколько строк, а хочется одной строкой.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2020, 12:00
Ответы с готовыми решениями:

Разложение на простые множители, ошибка неявного преобразования
Доброй ночи! Необходимо реализовать алгоритм разложения на множители, вот, что имеется: public BigInteger...

Перегрузка явного и неявного преобразования
Известно что в языке C# существует возможность определение процедур явного и неявного преобразования для различных кастомных структур и...

Продемонстрировать использование неявного преобразования из типа char
Здравствуйте, помогите написать задачу Постройте Windows-приложение, в котором тип источника - char, тип цели - все типы, Для которых...

10
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
25.12.2020, 14:28
Цитата Сообщение от 1inkin1 Посмотреть сообщение
так как неявного преобразовария между System.DBNull и System.Guid не существует
Этого более чем достаточно, чтобы вызвать ошибку на стадии компиляции. Если бы эти 2 типа имели общего наследника или было бы явное / неявное преобразование - тогда другой вопрос. Можете почитать тут Тернарный оператор, подводные камни
Цитата Сообщение от 1inkin1 Посмотреть сообщение
AddParametersValue
Можно ссылку на документацию на этот метод? Или хотя бы скажите какие типы возможны в роли 3-го параметра. Возможно получится найти лазейку
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
25.12.2020, 14:52  [ТС]
C#
1
AddParametersValue(IDbCommand Cmd, string ParamName, object Val)
Установка значения параметра сформированной SQL-каманды перед ее выполнением. Задает значения полей для записи в базу данных PostgreSQL. До этого использовал для подключения npgsql 2.7. Чтобы перейти на PostgreSQL 13, обновил до npgsql 4.1, а там поменялась работа с полями типа guid и нулевыми значениями. Раньше база данных спокойно приримала guid в текстовом формате, а теперь приходится преобразовывать в тип гуида. И нулевые значения отдавать в виде DBNull.Value, а не обычного null. Вот и ишу способы как бы это всё компактно записать, чтобы не использовать громоздкие условия
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
25.12.2020, 15:04
Лучший ответ Сообщение было отмечено 1inkin1 как решение

Решение

1inkin1, единственное что приходит на ум - один из типов приводить к object
C#
1
2
3
4
        string str = "qw";
        object ob;
        ob = str == null ? DBNull.Value : (object)Guid.Parse("936DA01F-9ABD-4d9d-80C7-02AF85C822A8");
        ob = str == null ? (object)DBNull.Value : Guid.Parse("936DA01F-9ABD-4d9d-80C7-02AF85C822A8");
Чисто теоретически это будет работать, практически - надо тестировать при занесении данных в БД.
1
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
25.12.2020, 15:06  [ТС]
Поле, из которого берется значение параметра, может быть только null или guid и раньше я даже ничего не проверял, а просто отдавал значение на запись в базу данных. Теперь нужно проверить, что находится в поле, если null, то записывать DBNull.Value, а есои нет, то преобразовывать в Guid и записывать его.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
26.12.2020, 11:00
1inkin1, можно null передавать. Он автоматически преобразуется в DBNull.Value
C#
1
db.AddParametersValue(cm, "@PARAM", textedit.Properties.Value == null ? (Guid?)null : Guid.Parse(textedit.Properties.Value.ToString())
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
26.12.2020, 16:51  [ТС]
У меня не принимает, выдаёт ошибку несоответсвия данных, если перелавать null из полей verticalgrid DevExpress.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
26.12.2020, 17:36
1inkin1, какую именно ошибку?
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
28.12.2020, 08:28  [ТС]
При выполнении запроса на запись в базу данных npgsql выдает ошибку с сообщением"Parameter @PARAM must have its value set" из функции void ResolveHandler(Npgsql.TypeMapping.Connec torTypeMapper). Это в том случае, если editorRow в VGridControl имеет значение null.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18298 / 14222 / 5368
Регистрация: 17.03.2014
Сообщений: 28,900
Записей в блоге: 1
28.12.2020, 08:44
1inkin1, ясно. Значит npgsql ожидает именно DBNull.Value.
0
2 / 2 / 2
Регистрация: 13.03.2014
Сообщений: 458
28.12.2020, 11:08  [ТС]
Да вот. Теперь везде в коде меняю значения параметров с обычной передачи значения из поля на условие
C#
1
editorRow.Properties.Value == null ? DBNull.Value : editorRow.Properties.Value
С гуидами вот помогли похожее условие сделать, чтобы и на них не ругалась.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2020, 11:08
Помогаю со студенческими работами здесь

Работает ли для операторов отношения правило неявного преобразования
using System; namespace ConsoleApplication3 { class Program { static void Main(string args) { ...

Ошибка преобразования System.DBnull в стринг
Всем здравствуйте. DataGridView инициализирована базой данных. Все поля базы данных строковые. В полях базы данных допускается...

Подскажите способ преобразования GUID строчки в GUID тип
Создать GUID и преобразовать в строку легко, а как сделать обратно?

Избавиться от неявного преобразования
Код должен делать обратное преобразование Фурье. -Я нахожу U'(w) и U''(w) -После того как я их найду то следуя формуле...

MinGW запрет неявного преобразования типов
Существует ли какой то режим у gcc (MinGW) где бы компилятор "ругался" или хотя бы предупреждал о неявном преобразование типов? Причем не...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
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
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
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
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru