WPF-วิธีการบันทึกรูปลง Database

วิธีการบันทึกรูปลง Database

ขั้นตอนที่ 1

สร้างตารางข้อมูลสำหรับเก็บรูป ดังนี้
CREATE TABLE postpicture
(
id int IDENTITY(1, 1) NOT NULL,
imagevalue varbinary(MAX) NULL,
imagename nvarchar(150) NULL
)

ขั้นตอนที่ 2

New โปรเจ็ค WPF Browser Application เปิด Form ที่ต้องการแสดงรูป เพิ่ม Control Image,Textbox,Button


ขั้นตอนที่ 3 Source Code

สำหรับโหลดรูปจากแหล่งข้อมูล Event Button Select Image Click เพิ่มโค้ด ดังนี้
        private void btnSelectPicture_Click(object sender, RoutedEventArgs e)
        {
            Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
            dlg.Filter = "png files (*.png)|*.png|jpg files (*.jpg)|*.jpg|gif files (*.gif)|*.gif|jpeg files (*.jpeg)|*.jpeg";

            Nullable<bool> result = dlg.ShowDialog();

            if (result == true)
            {
                FileStream fs = new FileStream(dlg.FileName, FileMode.Open, FileAccess.Read);
                imageValue = new byte[fs.Length];
                fs.Read(imageValue, 0, System.Convert.ToInt32(fs.Length));
                fs.Close();
                byte2Image(imageValue);               

                txtboxImageName.Text = dlg.SafeFileName;
            }
        }

สำหรับบันทึกข้อมูลลง Table Event Button Save Click เพิ่มโค้ด ดังนี้
         private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            StringBuilder strSql = new StringBuilder(0);
            strSql.Append(" INSERT INTO PostPicture");
            strSql.Append(" ( imagevalue");
            strSql.Append(" , imagename");
            strSql.Append(" ) VALUES ( ");
            strSql.Append("  @imagevalue");
            strSql.Append(" ,@imagename");
            strSql.Append(" ) ");

            SqlCommand cmd = new SqlCommand(strSql.ToString());
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@imagevalue", imageValue);
            cmd.Parameters.AddWithValue("@imagename", txtboxImageName.Text);

            ExecuteNonQuery(cmd);
        }

 สำหรับค้นหาข้อมูลจาก Table ขึ้นมาแสดง Event Button Search เพิ่มโค้ด ดังนี้
        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            StringBuilder strSql = new StringBuilder(0);

            strSql.Append(" SELECT * FROM PostPicture ");
            strSql.Append(" WHERE ImageName = @ImageName ");

            SqlCommand cmd = new SqlCommand(strSql.ToString());
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.AddWithValue("@ImageName", txtboxImageName.Text);

            DataTable dt = ExecuteDataTable(cmd);

            if (dt.Rows.Count > 0)
            {
                if (dt.Rows[0]["ImageValue"] != DBNull.Value)
                {
                    imageValue = (byte[])dt.Rows[0]["ImageValue"];
                    byte2Image(imageValue);               

                 }
                else
                {
                    imageValue = null;
                }
              
                txtboxImageName.Text = dt.Rows[0]["ImageName"].ToString(); ;
            }

            dt.Dispose();
            dt = null;
        }

สำหรับการแปลงข้อมูล Byte เพื่อไปแสดงค่าใน Image ทำได้ ดังนี้
        private void byte2Image(byte[] Picture)        {
            byte[] data = Picture;
            MemoryStream strm = new MemoryStream();
            strm.Write(data, 0, data.Length);
            strm.Position = 0;
            System.Drawing.Image img = System.Drawing.Image.FromStream(strm);
            BitmapImage bi = new BitmapImage();
            bi.BeginInit();
            MemoryStream ms = new MemoryStream();
            img.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
            ms.Seek(0, SeekOrigin.Begin);
            bi.StreamSource = ms;
            bi.EndInit();
            imageShow.Source = bi;
        }

หากเกิด Error Permission ให้ทำการเพิ่มสิทธิ์ใน app.manifest ดังนี้
<PermissionSet class="System.Security.PermissionSet" version="1" ID="Custom" SameSite="site"  Unrestricted="true"/>

Comments