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
Post a Comment