2

我正在创建一个应用程序来将学生信息保存到 SQL 中,我想知道如何使用实体框架将图像从 WPF 中的图像控件插入到 SQL 数据库

我制作了将图像上传到图像控件的事件,现在我需要使用实体框架将其保存到 sql 数据库

图片加载按钮代码:

private void uploadbt_Click(object sender, RoutedEventArgs e)
 {
     OpenFileDialog op = new OpenFileDialog();
     op.Title = "Select a picture";
     op.Filter = "All supported graphics|*.jpg;*.jpeg;*.png|" +
         "JPEG (*.jpg;*.jpeg)|*.jpg;*.jpeg|" +
         "Portable Network Graphic (*.png)|*.png";
     if (op.ShowDialog() == true)
     {
         photo.Source = new BitmapImage(new Uri(op.FileName));
     }  
 }

这是我的名为 cv 的数据库

在此处输入图像描述

这是我将一些信息保存到数据库中的代码 这个用于保存按钮

facultymakerEntities1 entity = new  facultymakerEntities1();

         cv CV = new cv();
         CV.Full_Name = fullnametb.Text;
         CV.Activities = activitestb.Text;
         CV.Address = addresstb.Text;
         CV.Birth_Day = bddate.SelectedDate.Value;
         CV.Courses = cousetb.Text;
         CV.E_Mail = emailtb.Text;

         entity.cvs.Add(CV);
         entity.SaveChanges();

如何将图像控件中的图像保存到数据库中?

谢谢;

4

2 回答 2

4

您肯定会将编码图像存储为byte[]. 以下方法从 BitmapSource 创建一个 PNG 帧:

private byte[] BitmapSourceToByteArray(BitmapSource image)
{
    using (var stream = new MemoryStream())
    {
        var encoder = new PngBitmapEncoder(); // or some other encoder
        encoder.Frames.Add(BitmapFrame.Create(image));
        encoder.Save(stream);
        return stream.ToArray();
    }
}

当您将 Bi​​tmapImages 放入图像的源时,您可以简单地将其传递给此方法:

var imageBuffer = BitmapSourceToByteArray((BitmapSource)photo.Source);
于 2013-09-18T19:08:30.410 回答
2

SqlServer 中的图像是“从 0 到 2^31-1 (2,147,483,647) 字节的可变长度二进制数据”。在 EF 中,您需要有一个byte[]类型的属性,该属性可以映射到imageSqlServer 中的类型列。当您从磁盘加载图像时,不要将其加载到 BitmapImage 而是加载到字节数组,相应地设置属性并将.SaveChanges()其存储在数据库中。如果您想向用户显示图像,请将其从数据库中加载为字节数组,然后创建一个 BitmapImage 实例。您可能必须使用BimatpImage.StreamSource属性来做到这一点。

于 2013-09-18T19:10:33.883 回答