как вставить изображение в базу данных с помощью WPF

У меня есть вопрос WPF.

У меня есть 2 текстовых поля и управление изображением в Форме WPF. Управление изображением имеет изображение в нем.

Я хочу вставить содержание каждого из текстовых полей и изображения в 3 отдельных столбцах в базе данных SQL. Текстовые поля питаются в varchar столбцы, в то время как само изображение загружается в столбец с изображением типа данных.

Как я могу сделать это?

Спасибо

6
задан Tom H 6 July 2010 в 17:24
поделиться

4 ответа

make 2 table, первая таблица содержит текст textbox1 [возможно, «имя»], текст textbox2 [возможно, surname] и imageId [], другая таблица содержит идентификатор файла, байты файла и расширения файла. Когда вы сохраняете вышеупомянутую информацию с картина. возьмите байты изображения и расширения сохраните это. когда вы получаете изображение для отображения где-нибудь, вы переводите байт в файл через его расширение http://www.beansoftware.com/ASP.NET-Tutorials/Save-Read-Image-Database. aspx здесь для ASP.NET, но элементы управления в .net обычно такие же. (текстовое поле.Текст и т. д.)

private void Button1_Click(object sender, System.EventArgs e)
{
 Stream img_strm = upload_file.PostedFile.InputStream;

//Retrieving the length of the file to upload
int img_len = upload_file.PostedFile.ContentLength;
//retrieving the type of the file to upload
string strtype = upload_file.PostedFile.ContentType.ToString();
string strname = txtimgname.Text.ToString();
byte[] imgdata = new byte[img_len];
int n = img_strm.Read(imgdata, 0, img_len);
int result = SaveToDB(strname, imgdata, strtype);}
0
ответ дан 17 December 2019 в 04:45
поделиться

Также можно настроить SSL-подключения для повышения безопасности.

-121--1948967-

Во-первых, 3 поездки туда и обратно на самом деле не имеют большого значения. Если бы вы говорили о 300 поездках туда и обратно, то это было бы другим делом, но для всего лишь 3 поездок туда и обратно я бы согласился, чтобы это было определенным случаем преждевременной оптимизации.

То есть, я бы сделал это, вероятно, чтобы выполнить 3 хранимых procuedres с помощью SQL:

exec dbo.p_myproc_1 @param_1 = @in_param_1, @param_2 = @in_param_2
exec dbo.p_myproc_2
exec dbo.p_myproc_3

Вы можете затем выполнить итерацию через возвращенные наборы результатов, как если бы вы непосредственно выполнили несколько наборов строк.

-121--1357670-

Я не уверен, как работает тип поля изображения, однако это может быть полезно:

Image UriSource and Data Binding

Другими словами, может потребоваться использовать конвертер значений для преобразования в формат базы данных/из него в формат презентации (WPF).

0
ответ дан 17 December 2019 в 04:45
поделиться

Мы делаем это так, чтобы изображения сохранялись в базе данных в виде больших двоичных объектов (это довольно маленькие изображения, 4–500 КБ, поэтому сохраняем их в db не должно вызывать проблем с производительностью), получить их как массивы байтов, а затем использовать ValueConverter для преобразования из байта [] в BitMap . {{ 1}} XAML для элемента управления изображением выглядит следующим образом:

<Image Source="{Binding Path=RawImageData, 
                        Converter={StaticResource ByteArrayToBitmapImageConverter},
                        Mode=OneWay}" />

Свойство, к которому мы привязываем в ViewModel, представляет собой просто байт [] , как это;

private byte[] _rawImageData;
public byte[] RawImageData
{
    get { return _rawImageData; }
    set
    {
        if (value != _rawImageData)
        {
            _rawImageData = value;
            NotifyPropertyChanged("RawImageData");
        }
    }
}

И затем ValueConverte выглядит так:

    public class ByteArrayToBitmapImageConverter : IValueConverter
    {
      public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
      {
        var rawImageData = value as byte[];
        if (rawImageData == null)
          return null;

        var bitmapImage = new System.Windows.Media.Imaging.BitmapImage();
        using (var stream = new MemoryStream(rawImageData))
        {
          bitmapImage.BeginInit();
          bitmapImage.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
          bitmapImage.CacheOption = BitmapCacheOption.Default;
          bitmapImage.StreamSource = stream;
          bitmapImage.EndInit();
        }
        return bitmapImage;
      }

     public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
     {
       throw new NotImplementedException();
     }
   }
4
ответ дан 17 December 2019 в 04:45
поделиться

Если вы хотите обрабатывать изображения BitmapSource, включая случаи, когда источники изображений не являются файлами, я рекомендую скопировать буфер пикселей в array с последующим сохранением метаданных массива + формата пикселей и размеров (массив и метаданные можно использовать для воссоздания изображения ).

0
ответ дан 17 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: