Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2293 / 1609 / 400
Регистрация: 26.06.2017
Сообщений: 4,773
Записей в блоге: 1

Автоконвертирование DBNull

28.02.2024, 12:03. Показов 1287. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

При работе с базами данных при помощи ADO.Net постоянно приходится делать проверки значений на null/DBNull. Например:
C#
1
2
3
4
5
6
7
8
9
10
11
public void Save(myObj item){
    DbCommand cmd = myRepo.DbProviderFactory.CreateCommand();
    // Тут создаём INSERT запрос, в котором есть параметр Name
    // А далее начинается чехарда с проверками
    if (item.Name == null) {
        cmd.Parameters.Add("@Name", DBNull.Value);
    }
    else {
        cmd.Parameters.Add("@Name", item.Name);
    }
}
В обратную сторону тоже самое.

Как можно сделать автоматическую подстановку DBNull.Value при item.Name == null ? Может можно как-то применить TypeConverter? Причём хотелось бы иметь такую автозамену для любого Nullable типа данных.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.02.2024, 12:03
Ответы с готовыми решениями:

Ошибка неявного преобразования DBNull и Guid
Здравствуйте. Помогите какнибудь попроще и локаничнее написать передачу значения параметру при записи в бащу данных. Нужна проверка, что...

Сравнение id с DBNull
Есть код на С#: public void InsertData(string Surname, string Name) { string conStr =...

C# проблема с System.DBNULL
try { FbCommand cmd = new FbCommand(sql, connection); adapter = new FbDataAdapter(cmd); ...

24
 Аватар для Andrey-MSK
3377 / 2263 / 388
Регистрация: 14.08.2018
Сообщений: 7,673
Записей в блоге: 4
29.02.2024, 10:35
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Wolfdp Посмотреть сообщение
(object)DBNull.Value
Зачем object? Просто DBNull.Value - это и есть значение СУБД NULL.
0
HF
 Аватар для HF
1337 / 921 / 202
Регистрация: 09.09.2011
Сообщений: 2,742
Записей в блоге: 2
29.02.2024, 10:39
Цитата Сообщение от Usaga Посмотреть сообщение
Dapper.NET это делает самостоятельно.
Добавлю тогда что крупные ORMки (а не только хвалёный Dapper ) это умеют делать. Но раз он про чистый ADO говорил, я уж не стал эту тему затрагивать.
0
2293 / 1609 / 400
Регистрация: 26.06.2017
Сообщений: 4,773
Записей в блоге: 1
29.02.2024, 10:47  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Зачем object?
Без приведения падает с ошибкой - проверено.
0
 Аватар для Andrey-MSK
3377 / 2263 / 388
Регистрация: 14.08.2018
Сообщений: 7,673
Записей в блоге: 4
29.02.2024, 11:08
Цитата Сообщение от Uswer Посмотреть сообщение
Без приведения падает с ошибкой - проверено.
А если так?
C#
1
2
3
4
5
6
7
8
SqlParameter pEObjectID = new SqlParameter
{
    ParameterName = "@idEObject",
    Value = eObject.EObjectID ?? DBNull.Value, 
    SqlDbType = SqlDbType.Int,
    Direction = ParameterDirection.Input
};
sqlCommand.Parameters.Add(pEObjectID);
0
Эксперт .NET
 Аватар для Usaga
14371 / 9478 / 1360
Регистрация: 21.01.2016
Сообщений: 35,749
29.02.2024, 11:46
HF, ну, я как вспомню как мы с чистым адо работали, какие там портянки были и проверки на DBNull.Value... Поэтому сходу говорю: нафиг чистый ADO.NET...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.02.2024, 11:46

DBNull используется только в программе?
объясните, пожалуйста, правильно ли понимаю, что при помощи класса DBNull можно присвоить null полю таблиц, которая находится в программе...

DBNull при попытке сравнить значения
Вот такой кусок кода if (!DBNull.Value.Equals(cmd.Parameters)) extcode =...

DBNull несмотря на то, что ячейка не пустая
Ситуация такая, есть столбец с различными значениями. Я эти самые значения пытаюсь считать (смотреть код ниже). Простые значения вроде 3...

НЕВОЗМОЖНО выполнить приведение данного объекта из DBNull к другому типу
Считываю данные из грида, и там где грид с галочкой, читаю как булевскую переменную, при верном значении при открытии новой формы...

Трехслойная архитектура для ADO NET, возвращение DBNull и мелочи
Здравствуйте. Прочитав эту статью про трехслойную архитектуру доступа к данным, решил уже наконец научиться писать всё нормально и по...


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

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru