| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Базы данных под .NET > Переходы по БД которая содержит картинки |
| Автор: Redstuff 21.8.2007, 23:00 | ||||
| Столкнулся с проблемой перехода к записи в таблице, которая содержит картинки. Есть таблица, но не во всех записях содержится картинка и возникает следующая ошибка: (8 строка)
Участок кода:
Как можно решить проблему? Хотелось бы получать в pictureBox1 текстовую надпись "картинка отсутствует" (без применения картинок хранящихся в бд) или вовсе пустой pictureBox1. На ум приходит лишь одна мысль, загружать картинки с надписью "картинка отсутствует", но может есть лучше решение? |
| Автор: Idsa 22.8.2007, 08:10 | ||
Изменяем код :
|
| Автор: Redstuff 22.8.2007, 10:19 | ||||
Idsa, а в запросе не надо ничего менять? Потому как
это условие выполняется всегда... И ошибка на строку
|
| Автор: Redstuff 22.8.2007, 11:39 | ||
| Idsa, содержание таблицы примерно такое (упрощенный пример): ID | Name | Photo .... ----------------------------------- 1 | samsung | pic1 ..... 2 | asus | null .........
|
| Автор: Idsa 22.8.2007, 11:57 |
| Поставь breakpoint на строчку 11 и посмотри, чему равен barrImgObj для строки, в которой нет фотографии. |
| Автор: Redstuff 22.8.2007, 12:18 |
| barrImgObj = {} barrImg = null |
| Автор: Idsa 22.8.2007, 12:33 | ||
| Действительно, значение не приводится к null... Тогда предлагаю вот такой вариант через try-catch:
|
| Автор: tol05 22.8.2007, 12:47 | ||
| просто null и DBNull (который возвращается из базы при отсутсвии картинки) - это разные вещи... DBNull - это объект класса, а null - пустой указатель, указатель на ничто. http://msdn2.microsoft.com/en-us/library/system.dbnull.aspx
Redstuff, ты не пробовал вместо if (barrImgObj != null) юзать if (barrImgObj != DBNull.Value) ? |
| Автор: Idsa 22.8.2007, 13:04 | ||||||
Действительно. Тогда получим два рабочих варианта: Через if (с dbNll):
и через try-catch:
Если во второй вариант добавить catch'и для con.Open и fs.Write, то вообще красота получится |
| Автор: Redstuff 22.8.2007, 13:13 | ||||
| Спасибо все работает, но надо теперь чтобы было уведомление об отсутствии картинки или просто ее отсутствие в pictureBox. Next
Когда попадаю на запись, которая не содержит картинки то вижу картинку notphoto.jpg После двигаюсь дальше или в обратном направлении, она попрежнему висит Пробовал так:
Но намного лучше не стало... Пока писал уже 2 поста) |
| Автор: Idsa 22.8.2007, 13:33 | ||
Это потому что существующую картинку ты выводить через BackgroundImage, а "несуществующую" - через Image. Выбери один вариант и используй его для обоих случаев. |
| Автор: Redstuff 22.8.2007, 13:48 |
| Idsa, спасибо! |
| Автор: Idsa 22.8.2007, 14:06 |
Рад помочь |
| Автор: tol05 22.8.2007, 16:05 |
| OFFTOP... не в обиду будь сказано, но... обработку исключений обычно тогда, когда программист не может предусмотреть какая сложится run-time ситуация. Здесь же налицо элементарная проверка типа возвращенного значения (малоизвестного, как оказалось, правда ... ) Не проще ли проверить тип полученного объекта (который явно может быть или DBNull или byte[]), и выйти из процедуры, чем ждать, пока CLR создат, инициализирует и выбросит объект исключения, а потом будет проверять по стеку наличие обработчика на перехват?.. есть еще третий рабочий вариант: в EntryPoint программы все загнать в AppDomain.UnhandledException и в обработчике написать что-то типа "Вах! Что-то прошло не так!" |
| Автор: Idsa 22.8.2007, 16:22 | ||
tol05, вариант с try-catch предусматривал реализацию полноценной обработки исключений: InvalidCastException, SqlException... о чем я заявил выше:
|
| Автор: Idsa 22.8.2007, 16:43 |
| Кроме того, barrImgObj, помимо массива байт, может быть равен не только DbNull (в случае отсутствия картинки), но и null (если строка с заданным id отсуствует). |