Доброго времени суток!
Подскажите пожалуйста, кто-нибудь сталкивался с такой проблемой: выводим изображение из БД, хранится в базе тип 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);
}
Здравствуйте, 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 не вижу смысла)
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Ziggi111, Вы писали:
Z>>попробуй так Z>>
Z>>command.CommandTimeout = 0;
Z>>
А> спасибо конечно, но command выполняется, данные в reader складываются, а timeout происходит именно на вызове метода GetValue (поэтому выставлять бесконечный timeout не вижу смысла)
Ну в общем да. строка уже прочитана. Тога возникает два вопроса.
1. почему не используется GetBytes()?
2. таймаут чего возникает? если просто в дебагрежиме вываливается и по нажатию на продолжение чтение продолжается и завершается успешно, то это не страшно. я когда-то сталкивался с такой ботвой, но не помню где имменно нужно поставить галку в настройках студии. помню тока что гугл мне помог минут за 5 примерно
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... чтение успешно не завершается
Гуглю видать неправильно подходящего решения никак не найду
Здравствуйте, 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];
...
}
хе, а CommandTimeout = 0 (решила все таки попробовать) помогло оказывается)))) но как-то это не выход... попробую с DataSet еще поупражняться, спасибо Вам большое
Здравствуйте, 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 стоит).
А>дык можно не 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();
}
Здравствуйте, Nnet, Вы писали:
N>хе, а CommandTimeout = 0 (решила все таки попробовать) помогло оказывается)))) но как-то это не выход... попробую с DataSet еще поупражняться, спасибо Вам большое