вывод изображения из БД
От: Nnet  
Дата: 12.11.08 11:09
Оценка:
Доброго времени суток!
Подскажите пожалуйста, кто-нибудь сталкивался с такой проблемой: выводим изображение из БД, хранится в базе тип image, вот код:
SqlCommand command = new SqlCommand(query, LibForms.AppMain.SqlConnectionCommon);
command.CommandType = CommandType.StoredProcedure;
SqlDataReader reader;
LibForms.AppMain.SqlConnectionCommon.Open();
reader = command.ExecuteReader();
if (reader.Read())
{
byte[] b = reader.GetValue(0) as byte[]; //здесь получаем timeout, причем выполняю запрос на разных серверах, проблема только на одном
System.IO.Stream bs = new System.IO.MemoryStream();
bs.Write(b, 0, b.Length);
pictureBox1.Image = Bitmap.FromStream(bs);
}

В чем может быть проблема и решаема ли она?
Re: вывод изображения из БД
От: Ziggi111 Россия  
Дата: 12.11.08 11:13
Оценка:
Здравствуйте, Nnet, Вы писали:

N>Доброго времени суток!

N>Подскажите пожалуйста, кто-нибудь сталкивался с такой проблемой: выводим изображение из БД, хранится в базе тип image, вот код:
N>SqlCommand command = new SqlCommand(query, LibForms.AppMain.SqlConnectionCommon);
N>command.CommandType = CommandType.StoredProcedure;
N>SqlDataReader reader;
N>LibForms.AppMain.SqlConnectionCommon.Open();
N>reader = command.ExecuteReader();
N>if (reader.Read())
N>{
N> byte[] b = reader.GetValue(0) as byte[]; //здесь получаем timeout, причем выполняю запрос на разных серверах, проблема только на одном
N> System.IO.Stream bs = new System.IO.MemoryStream();
N> bs.Write(b, 0, b.Length);
N> pictureBox1.Image = Bitmap.FromStream(bs);
N>}

N>В чем может быть проблема и решаема ли она?


попробуй так
command.CommandTimeout = 0;
Re[2]: вывод изображения из БД
От: Аноним  
Дата: 12.11.08 11:31
Оценка:
Здравствуйте, Ziggi111, Вы писали:

Z>попробуй так

Z>
Z>command.CommandTimeout = 0;

Z>


спасибо конечно, но command выполняется, данные в reader складываются, а timeout происходит именно на вызове метода GetValue (поэтому выставлять бесконечный timeout не вижу смысла)
Re[3]: вывод изображения из БД
От: Ziggi111 Россия  
Дата: 12.11.08 11:43
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Ziggi111, Вы писали:


Z>>попробуй так

Z>>
Z>>command.CommandTimeout = 0;

Z>>


А> спасибо конечно, но command выполняется, данные в reader складываются, а timeout происходит именно на вызове метода GetValue (поэтому выставлять бесконечный timeout не вижу смысла)

Ну в общем да. строка уже прочитана. Тога возникает два вопроса.
1. почему не используется GetBytes()?
2. таймаут чего возникает? если просто в дебагрежиме вываливается и по нажатию на продолжение чтение продолжается и завершается успешно, то это не страшно. я когда-то сталкивался с такой ботвой, но не помню где имменно нужно поставить галку в настройках студии. помню тока что гугл мне помог минут за 5 примерно
Re[4]: вывод изображения из БД
От: Nnet  
Дата: 12.11.08 13:24
Оценка:
Z>1. почему не используется GetBytes()?
Попробовала GetBytes():
byte[] b = new byte[8192];
reader.GetBytes(0, 0, b, 0, 8192);
System.IO.Stream bs = new System.IO.MemoryStream();
bs.Write(b, 0, b.Length);
аналогичный таймаут...
Z>2. таймаут чего возникает? если просто в дебагрежиме вываливается и по нажатию на продолжение чтение продолжается и завершается успешно, то это не страшно. я когда-то сталкивался с такой ботвой, но не помню где имменно нужно поставить галку в настройках студии. помню тока что гугл мне помог минут за 5 примерно
Таймаут: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Вываливается в catch... чтение успешно не завершается
Гуглю видать неправильно подходящего решения никак не найду
Re[5]: вывод изображения из БД
От: Ziggi111 Россия  
Дата: 12.11.08 14:32
Оценка: -1
Здравствуйте, Nnet, Вы писали:

Z>>1. почему не используется GetBytes()?

N>Попробовала GetBytes():
N> byte[] b = new byte[8192];
N> reader.GetBytes(0, 0, b, 0, 8192);
N> System.IO.Stream bs = new System.IO.MemoryStream();
N> bs.Write(b, 0, b.Length);
N>аналогичный таймаут...
Z>>2. таймаут чего возникает? если просто в дебагрежиме вываливается и по нажатию на продолжение чтение продолжается и завершается успешно, то это не страшно. я когда-то сталкивался с такой ботвой, но не помню где имменно нужно поставить галку в настройках студии. помню тока что гугл мне помог минут за 5 примерно
N>Таймаут: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
N>Вываливается в catch... чтение успешно не завершается
N>Гуглю видать неправильно подходящего решения никак не найду
А попробуй не через DataReader прочитать (меня они почему-то всегда смущали именно вот таким непонятным поведением ).

SqlCommand command = new SqlCommand(query, LibForms.AppMain.SqlConnectionCommon);
command.CommandType = CommandType.StoredProcedure;
_Adapter = new SqlDataAdapter (command);
DataTable t = new DataTable();
_Adapter.Fill(t);
if (t.Rows.Count > 0)
{
byte[] b = (byte [])t.Rows[0[0];
...
}
Re[6]: вывод изображения из БД
От: Nnet  
Дата: 12.11.08 15:01
Оценка:
хе, а CommandTimeout = 0 (решила все таки попробовать) помогло оказывается)))) но как-то это не выход... попробую с DataSet еще поупражняться, спасибо Вам большое
Re: вывод изображения из БД
От: Hiker Украина  
Дата: 12.11.08 15:32
Оценка:
Здравствуйте, Nnet, Вы писали:

N>Доброго времени суток!

N>Подскажите пожалуйста, кто-нибудь сталкивался с такой проблемой: выводим изображение из БД, хранится в базе тип image, вот код:
N>SqlCommand command = new SqlCommand(query, LibForms.AppMain.SqlConnectionCommon);
N>command.CommandType = CommandType.StoredProcedure;
N>SqlDataReader reader;
N>LibForms.AppMain.SqlConnectionCommon.Open();
N>reader = command.ExecuteReader();
N>if (reader.Read())
N>{
N> byte[] b = reader.GetValue(0) as byte[]; //здесь получаем timeout, причем выполняю запрос на разных серверах, проблема только на одном
N> System.IO.Stream bs = new System.IO.MemoryStream();
N> bs.Write(b, 0, b.Length);
N> pictureBox1.Image = Bitmap.FromStream(bs);
N>}

N>В чем может быть проблема и решаема ли она?


вообще, если в результате запроса ожидается единственное значение лучше использовать command.ExecuteScalar()
Re: вывод изображения из БД
От: Аноним  
Дата: 12.11.08 16:28
Оценка:
Здравствуйте, Nnet, Вы писали:

N> byte[] b = reader.GetValue(0) as byte[]; //здесь получаем timeout, причем выполняю запрос на разных серверах, проблема только на одном


Речь о разных серверах БД? Это случаем не MS SQL 2000? Если он — сервис пак 3 на него установлен? Я помню что-то похожее по симптомам, когда ряд безобидных в общем-то запросов обламывался на ридере, если на SQL 2K нет сервиспака. Но вот точный текст ошибки не скажу
Re[7]: вывод изображения из БД
От: Аноним  
Дата: 13.11.08 06:32
Оценка:
Здравствуйте, Nnet, Вы писали:

N>хе, а CommandTimeout = 0 (решила все таки попробовать) помогло оказывается)))) но как-то это не выход... попробую с DataSet еще поупражняться, спасибо Вам большое

дык можно не 0, а например 60(там по умолчанию 30 стоит).
Re[8]: вывод изображения из БД
От: Nnet  
Дата: 14.11.08 03:28
Оценка:
А>дык можно не 0, а например 60(там по умолчанию 30 стоит).
Да понятно это, известно и про умолчание и про вариабельность этого параметра, просто 10 минут ждать для выполнения запроса не есть хорошо
Re: вывод изображения из БД
От: Аноним  
Дата: 14.11.08 04:16
Оценка:
Здравствуйте, Nnet, Вы писали:

N>Доброго времени суток!

N>Подскажите пожалуйста, кто-нибудь сталкивался с такой проблемой: выводим изображение из БД, хранится в базе тип image, вот код:
N>SqlCommand command = new SqlCommand(query, LibForms.AppMain.SqlConnectionCommon);
N>command.CommandType = CommandType.StoredProcedure;
N>SqlDataReader reader;
N>LibForms.AppMain.SqlConnectionCommon.Open();
N>reader = command.ExecuteReader();
N>if (reader.Read())
N>{
N> byte[] b = reader.GetValue(0) as byte[]; //здесь получаем timeout, причем выполняю запрос на разных серверах, проблема только на одном
N> System.IO.Stream bs = new System.IO.MemoryStream();
N> bs.Write(b, 0, b.Length);
N> pictureBox1.Image = Bitmap.FromStream(bs);
N>}

N>В чем может быть проблема и решаема ли она?


Привет! Может попробовать так:

var myCommand = new SqlCommand(query, connection);
            var myReader = myCommand.ExecuteReader();
            if (myReader.Read())
            {
                byte[] buff = (byte[])myReader["IMAGE_DATA"];
                System.IO.MemoryStream stream = new System.IO.MemoryStream(b, true);
                stream.Write(buff, 0, buff.Length);
                var img = Image.FromStream(stream);
                stream.Close();
            }


или так

             string strCmd = String.Format("SELECT photo FROM Photos WHERE id = 1");
             SqlCommand cmd = new SqlCommand(strCmd, sqlConn);
             byte[] b = (byte[])cmd.ExecuteScalar();
             if(b.Length > 0)
             {
                System.IO.MemoryStream stream = new System.IO.MemoryStream(b, true);
                stream.Write(b, 0, b.Length);
                Bitmap bmp = new Bitmap(stream);
                stream.Close();
             }


посмотри здесь
Re[7]: вывод изображения из БД
От: _d_m_  
Дата: 17.11.08 05:08
Оценка:
Здравствуйте, Nnet, Вы писали:

N>хе, а CommandTimeout = 0 (решила все таки попробовать) помогло оказывается)))) но как-то это не выход... попробую с DataSet еще поупражняться, спасибо Вам большое


Не надо никаких дасетов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.