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();
    }
}

BitmapImages をイメージのソースに配置すると、それをこのメソッドに渡すだけで済みます。

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

SqlServerの画像は「0から2^31-1(2,147,483,647)バイトまでの可変長バイナリデータ」です。EFでは、SqlServerbyte[]の型の列にマップできる型のプロパティが必要です。imageディスクから画像をロードするときは、BitmapImage ではなくバイト配列にロードし、それに応じてプロパティを設定.SaveChanges()し、データベースに保存します。イメージをユーザーに表示する場合は、データベースからイメージをバイト配列としてロードし、BitmapImage インスタンスを作成します。そのためには、おそらくBimatpImage.StreamSourceプロパティを使用する必要があります。

于 2013-09-18T19:10:33.883 に答える