Изображения и БД

AlexCOM
Дата: 23.09.2005 14:31:55
Помогите!!! пожалуйста

У меня в SQL-2000 есть таблица, в которой как я понимаю должно быть поле хронящее изображения(byte наверное, хотя там есть и image)...
А на форме в VB.NET есть picturebox, в котором должна отображаться картинка из базы, и также запись в БД из picturebox, если можно примерчик, если нет то как нить поподробнее, или ссылки к примерам, ОЧЕНЬ НАДО!!!!
Sv219
Дата: 24.09.2005 06:36:38
//выбираем картинку для записи в БД
private Byte[] fData = null;
fData = fDialog.GetFileData(filePatch);//filePatch - путь в файлу
//пихаем картинку в БД 
con.Open();
SqlCommand cmd = new SqlCommand("UPDATE kadr SET Photo = @Photo WHERE Cod = 971", con);
cmd.Parameters.Add("@Photo", SqlDbType.VarBinary);
cmd.Parameters["@Photo"].Value = fData;
int rowAff = cmd.ExecuteNonQuery();
con.Close();
//грузим картинку из БД
con.Open();
SqlCommand cmd = new SqlCommand("SELECT Photo FROM kadr WHERE Cod = 971", con);
SqlDataReader reader = cmd.ExecuteReader();
fData = (Byte[])reader.GetValue(0);
con.Close();
//отображаем загруженную картинку
MemoryStream ms = new MemoryStream(fData);
Bitmap bmp = new Bitmap(ms);
pctb.Image = bmp;// pctb = picturebox

//где GetFileData
/// <summary>
/// преобразует выбранный файл в массив байтов 
/// </summary>
/// <param name="path">путь к файлу</param>
/// <returns>файл в виде массива байтов </returns>
public Byte[] GetFileData(string path)
{
	FileStream fs = new FileStream(path, FileMode.Open);
	Byte[] byteFile = new Byte[fs.Length];
	int read = (int)fs.Length;
	fs.Read(byteFile, 0, read);
	return byteFile;
}
Smirnov Anton
Дата: 22.12.2005 18:44:54
а не можете объяснить, почему не проходит через процедуру и параметры
параметр p varbinary(8000)
...
			par = new SqlParameter("@p",SqlDbType.VarBinary,8000);
			System.IO.Stream str = new System.IO.MemoryStream();
			pictureBox1.Image.Save(str,pictureBox1.Image.RawFormat);
			fData = new Byte[str.Length];
			str.Read(fData,0,(int)str.Length);
			par.Value = fData;
			cmd.Parameters.Add(par);
...
А потом открыть его тоже через out patameter
...
			par = new SqlParameter("@p",SqlDbType.VarBinary,8000);
			par.Direction = ParameterDirection.Output;
			cmd.Parameters.Add(par);

			cmd.Connection = conn;
			cmd.ExecuteNonQuery();
			
			System.IO.MemoryStream ms = new System.IO.MemoryStream();
			fData = (Byte[])cmd.Parameters["@p"].Value;
			ms.Read(fData,0,(int)fData.Length);

			Bitmap bmp = new Bitmap(ms);
			pictureBox1.Image = bmp;
...

Профайлером смотрю - перегоняются те же массивы байтов
и в таблице хранится то же самое
но не выходит
Smirnov Anton
Дата: 22.12.2005 18:48:20
нет, вру
не те же массивы байтов
окончательный вопрос - как сделать через хранимую процедуру
вставить(вопрос решён с FileStream)
и как получить через out параметр хранимой процедуры?
Sv219
Дата: 23.12.2005 12:08:52
как получить через out параметр???
под рукой студии нет, поетому не могк проверить ваш код... и свой тоже, поетому предположу

попробуйте вместо этого
ms.Read(fData,0,(int)fData.Length);

написать как у меня
//отображаем загруженную картинку
MemoryStream ms = new MemoryStream(fData);
Bitmap bmp = new Bitmap(ms);
pctb.Image = bmp;// pctb = picturebox
Smirnov Anton
Дата: 23.12.2005 12:51:47
да, спасибо
я уже тоже переиграл
и вот так получилось
System.IO.MemoryStream ms = new System.IO.MemoryStream(fData,0,(int)fData.Length);
Bitmap bmp = new Bitmap(ms);
pictureBox1.Image = bmp;