ورود

View Full Version : دخیره تصویر در دیتابیس



omidparkour
سه شنبه 25 آذر 1393, 11:23 صبح
سلام
من میخوام داخل wpf یه فیلد داشته باشم که تصویر بگیره و توی دیتابیس sql server ذخیره کنه
چطور میشه همچین کاری رو کرد؟

SabaSabouhi
سه شنبه 25 آذر 1393, 13:26 عصر
سلام
به راحتی
1. تو جدولتون یه ستون با فرمت varbinary تعریف کنید ( با سایز محدود یا نامحدود )
2. معادل varbinary تو #c می‌شه []byte
3. یه converter نیاز دارین که bytearray و Image رو به هم تبدیل کنه.


public class ImageToByteArrayConverter : IValueConverter {
public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) {
if ( value==null ) return null;
var buffer = (byte[])value;
if ( buffer.Length == 0 ) return null;
var image = new BitmapImage();
using ( var mem = new MemoryStream( buffer ) ) {
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = mem;
image.EndInit();
}
image.Freeze();
return image;
}
public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture ) {
if(value==null) return null;
var source = (BitmapImage) value;
var memStream = new MemoryStream();
var encoder = new JpegBitmapEncoder();
encoder.Frames.Add( BitmapFrame.Create( image ) );
encoder.Save( memStream );
return memStream.GetBuffer();
}
}

4. از این converter هم برای انتقال اطلاعات به دیتابیس و هم برای bind کردن کنترل مورد نظرتون می‌تونید استفاده کنید.

صبا صبوحی

SabaSabouhi
چهارشنبه 26 آذر 1393, 12:00 عصر
سلام
یه بار دیگه پست من رو بخون.
تو wpf تصویر با فرمت image نگهداری می‌شود و در sql با فرمت varbinary شما باید با تابعی که من دادم این دو تا رو به هم تبدیل کنید.

شما از EF استفاده می‌کنید یا SqlCommand؟ اگر از EF استفاده می‌کنید که خیلی راحت هست فقط کافقیه مقدار رو تبدیل کنید، و اگر از Sqlcommand
استفاده می‌کنید با استفاده از SqlParameter به راحتی این کار عملیه

صبا صبوحی