Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2008, 22:13   #1
ruelCrow
 
Регистрация: 10.07.2008
Сообщений: 3
Печаль Чтение изображения из базы данных, Вместо изображения - "System.Byte[]"

Сервер: Windows Vista SP1 + IIS
База данных: Microsoft SQL Server 2008
Суть проблемы: При извлечении изображения из базы данных, я вижу вместо него надпись "System.Byte[]"

С Гуглом я дружу, он у меня по этому вопросу уже, можно сказать, в печёнках сидит: решения я так и не нашёл.

Source ASPX страницы, призванной выводить изображение:
Код:
<%@ Page Language="C#" AutoEventWireup="true" %> 
 
<% 
    //Строка запроса 
    string query = "SELECT img_data FROM Images WHERE img_id = '"+Request.QueryString["id"]+"'"; 
 
    //Создание подключения к БД 
    System.Data.SqlClient.SqlConnection myConnection = new System.Data.SqlClient.SqlConnection("user id=qwer;password=qwer;server=localhost;database=TstDB;connection timeout=3"); 
     
    //Создание запроса 
    System.Data.SqlClient.SqlCommand read = new System.Data.SqlClient.SqlCommand(query, myConnection); 
 
    //Открытие соединения 
    myConnection.Open(); 
 
    //Обработка запроса; результат передаётся в img 
    System.Data.SqlClient.SqlDataReader img = read.ExecuteReader(); 
 
 
    if (img.Read())
    { 
        //Создание массива байт
        byte[] b = (byte[])img[0];
 
        //Вывод предпологаемого результата в браузер 
        Response.ContentType = "image/png"; //Указание типа данных. Хотя, кажется, необязательно.
        Response.BinaryWrite(b); 
    } 
    myConnection.Close(); 
%>
Результатом выполнения программы является надпись "System.Byte[]". Такой же или похожий рельтат был в найденных в Гугле решениях.

В базе данных проблем точно нету, т.к. локальный запрос
Код:
SELECT img_data FROM Images WHERE img_id = '50'
выдаёт правильный результат, т.е. одну ячейку с бинарными данными.



----------------



Вот другой кусок кода, в котором я сначла считываю данные из изображения в переменную, а потом сразу вывожу той же функцией Response.BinaryWrite(b);.


Код:
// путь до изображения 
string SourceFilePath = "D:\\background.jpg"; 
 
// прочитаем изображение 
// (откроем поток) 
System.IO.FileStream fs = new System.IO.FileStream( 
SourceFilePath, 
System.IO.FileMode.Open, 
System.IO.FileAccess.Read); 
 
// создадаим массив Byte[]необходимого размера 
Byte[] b = new Byte[fs.Length]; 
 
// запишем байты изображения в массив b 
fs.Read(b, 0, b.Length); 
fs.Close(); 
 
//Вывод результата 
Response.BinaryWrite(b);
Результат - изображение видно по ссылке на файл .aspx


------------


Что, собственно, делать? Как "правильно" извлечь изображение из базы данных?
ruelCrow вне форума Ответить с цитированием
Старый 10.07.2008, 22:27   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Могу ошибиться, не пишу под дотнет, но по-моему вместо вот этого:
Код:
byte[] b = (byte[])img[0];
должно быть
Код:
byte[] b = (byte[]) img.GetValue(0);
B_N вне форума Ответить с цитированием
Старый 10.07.2008, 22:35   #3
ruelCrow
 
Регистрация: 10.07.2008
Сообщений: 3
По умолчанию

2B_N
Результат - тот же.

Строка
Код:
byte[] b = (byte[])read.ExecuteScalar();
приводит к аналогичному результату

----

Есть у меня подозрение, что проблема в IIS, либо в настройках SQL сервера... Только вот знать бы, где именно.

Последний раз редактировалось ruelCrow; 10.07.2008 в 22:41.
ruelCrow вне форума Ответить с цитированием
Старый 10.07.2008, 23:29   #4
ruelCrow
 
Регистрация: 10.07.2008
Сообщений: 3
По умолчанию

Проблема решилась, по закону подлости, как только я отчаялся и написал на форум.
Заключалась проблема в криворукости и невнимательнсоти.
А именно: когда я загружал изображения в БД, в SQL-запросе вместо скалярной переменной @img_data я использовал обычную вставку вида ...'"+b+"'.... Как результат: в БД оказывалась пресловутая строчка "System.Byte[]".
ruelCrow вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать чтение из тяжелой базы данных? Sanek777 Общие вопросы Delphi 1 02.09.2008 23:51
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
Excel файл открывается не "до конца" (странички "не показываются" только серое поле) Dorvir Microsoft Office Excel 2 28.03.2008 10:03
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49
База данных в Delphi "Учет посещаемости студентов в вузе" Айрат Фриланс 11 22.12.2006 18:46