PDA

View Full Version : سوال: مشکل در ذخیره و بازیابی عکس



hadi88
دوشنبه 30 اردیبهشت 1398, 10:29 صبح
با سلام
من یه جدول دارم که شامل فیلد های (radif,p_name,tell,mobile,adress,pic) هست که با استفاده از linq و StoredProcedure عملیات های مختلف روی پایگاه داده انجام میدم
برای ذخیره در جدول از کد زیر استفاده می کنم

MemoryStream ms = new MemoryStream();
pic.Image.Save(ms, pic.Image.RawFormat);
byte[] arrPic = ms.GetBuffer();
linq_data_classDataContext db = new linq_data_classDataContext();
db.psave_tbl_p(txt_n.Text, txt_t.Text, txt_m.Text, txt_a.Text, ms.GetBuffer());
dgv_p.DataSource = db.pselect_tbl_p();

کد StoredProcedure

ALTER PROCEDURE dbo.psave_tbl_p @p_name nvarchar(50), @tell nvarchar(11), @mobile nvarchar(11), @adress nvarchar(MAX), @pic varbinary
AS
Insert tbl_p values(@p_name,@tell,@mobile,@adress,@pic)
RETURN

وقتی بر روی سطری از datagrid کلیک میشه از کد زیر برای پر کردن فرم استفاده می کنم که با مشکل مواجه می شم

private void dgv_p_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (dgv_p.RowCount > 0)
{
txt_n.Text = dgv_p.SelectedCells[1].Value.ToString();
txt_t.Text = dgv_p.SelectedCells[2].Value.ToString();
txt_m.Text = dgv_p.SelectedCells[3].Value.ToString();
txt_a.Text = dgv_p.SelectedCells[4].Value.ToString();
MemoryStream ms = new MemoryStream((byte[])(dgv_p.SelectedCells[5].Value));
pic.Image = Image.FromStream(ms);
}
}

وقتی روی سطری از datagrid کاربر کلیک میکنه خطا زیر رو نشون میده که مربوط به فیلد عکس است

Unable to cast object of type 'System.Data.Linq.Binary' to type 'System.Byte[]'.

از دوستان هر کسی در این زمینه اطلاعاتی داره ممنون میشم کمکم کنه

saeidfar
سه شنبه 31 اردیبهشت 1398, 22:43 عصر
خودش گفته عزیز ، اطلاعات عکس در دیتابیس بصورت باینری ذخیره می شود اما وقتی میخاد در گرید ننمایش داده بشه بصورت آرایه بایتی هست ، حالا شما باید این وسط متغیر باینری رو به آرایه تبدیل کنید.

Mahmoud.Afrad
سه شنبه 31 اردیبهشت 1398, 23:08 عصر
var bin = dgv_p.SelectedCells[5].Value as System.Data.Linq.Binary;
MemoryStream ms = new MemoryStream(bin.ToArray());