سلام ،
ببینید مبنای Linq to Sql بر اساس Map کردن بنا شده . یعنی هر ستون از بانک اطلاعاتی رو به یک نوع خاص تبدیل می کنه . برای ستون Image هم از کلاس System.Data.Linq.Binary استفاده می کنه . حالت کلی اینه که شما باید عکستون رو با استفاده از متدی به شکل زیر به یک سری از بایت ها تبدیل کنید و به سازنده کلاس فوق ارسالش کنید :
private byte[] ImageToByteArray(System.Drawing.Image iimage) {
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
iimage.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
return stream.ToArray();
}
}
این تمام کاری هست که باید انجام بدین !
برای بازیابی و نمایش عکس در PictureBox هم باید مقدار ستون موجود در بانک رو که بایت هایی تشکیل دهنده ی عکس هستند رو با استفاده از کد زیر به عکس تبدیل کنید ( عکس مرحله قبل ) :
private Image ByteArrayToImage(byte[] imageBytes) {
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageBytes))
{
Image result = Image.FromStream(stream);
return result;
}
}
کد کلی مثال به شکل زیر هست ( اسم ستون عکس موجود در جدول pimage هست ) :
private byte[] ImageToByteArray(System.Drawing.Image iimage) {
using (System.IO.MemoryStream stream = new System.IO.MemoryStream())
{
iimage.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
return stream.ToArray();
}
}
private Image ByteArrayToImage(byte[] imageBytes) {
using (System.IO.MemoryStream stream = new System.IO.MemoryStream(imageBytes))
{
Image result = Image.FromStream(stream);
return result;
}
}
private void btnSaveImage_Click(object sender, EventArgs e)
{
System.Data.Linq.Binary imageBinary = new System.Data.Linq.Binary(ImageToByteArray(this.pictureBox1.Image));
DataClasses1DataContext context = new DataClasses1DataContext();
tablePersonel personel = new tablePersonel(){
FirstName = "Siavash",
LastName="Ebrahimi",
pimage = imageBinary
};
context.tablePersonels.InsertOnSubmit(personel);
context.SubmitChanges();
}
private void btnRestoreImage_Click(object sender, EventArgs e)
{
DataClasses1DataContext context = new DataClasses1DataContext();
tablePersonel currentPersonel = context.tablePersonels.Where(p => p.Id == 27).Select(p => p).Single();
this.pictureBox2.Image = ByteArrayToImage(currentPersonel.pimage.ToArray());
}
-- سوالی در رابطه با کدها داشتید بپرسید .