+2 امتیاز

سلام 

در این داتابیس من از linq استفادە کردم و component dotnetbar  بە ار بردم

این فیلدهای تیبل هستش

id 

name

date

img  دیتاتایپ image

حالا من میخوام عکس در دیتابیسم ذخیرە کنم( با روش linq)  و  در جدول دیتا گرید مشاهدە کنم و تمام کوئری هارو روش انجام بدم 

 

عکسی از محیط برنامە

بسته شده

1 پاسخ

+2 امتیاز
 
بهترین پاسخ

سلام ، 

ببینید مبنای 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());
        }

 

-- سوالی در رابطه با کدها داشتید بپرسید . 

مثل قبل جواب داد دمت گرم 

حالا هر کاری میکنم نمیتونم اونو داخل کوئری Edit و Delete بکنم 

برای dateTimeInput از value   استفادە کردم 

ولی برای تصویر چە باید کرد ؟

این کوئری Edit هست 

  private void buttonX3_Click(object sender, EventArgs e)
        {
             var db = new DataClasses1DataContext();
             int m = int.Parse(dataGridViewX1.CurrentRow.Cells[0].Value.ToString());
             var QEdit = db.test_tables.Where(c => c.id == m).Single();
             QEdit.name = textBoxX2.Text;
             QEdit.date = dateTimeInput1.Value;
            
             db.SubmitChanges();
             dataGridViewX1.DataSource = db.test_tables;

        }

 

و این کوئری Delete 

 

private void buttonX4_Click(object sender, EventArgs e)
        {
            var db = new DataClasses1DataContext();
            int m = int.Parse(dataGridViewX1.CurrentRow.Cells[0].Value.ToString());
            var QDel = db.test_tables.Where(c => c.id == m);
            if (QDel.Count() != 0) {
                db.test_tables.DeleteOnSubmit(QDel.Single());
                db.SubmitChanges();
                dataGridViewX1.DataSource = db.test_tables;
            }

حاجی ببخش زیاد میپرسم ..  frown

توسط (121 امتیاز) 1 4 10
سلا م این مشکل رو در قالب یه سوال جدیدمطرح بفرمایید با تشکر
توسط (6,480 امتیاز) 6 17 129
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,920 کاربر

دسته بندی ها

...