У меня есть вопрос WPF.
У меня есть 2 текстовых поля и управление изображением в Форме WPF. Управление изображением имеет изображение в нем.
Я хочу вставить содержание каждого из текстовых полей и изображения в 3 отдельных столбцах в базе данных SQL. Текстовые поля питаются в varchar столбцы, в то время как само изображение загружается в столбец с изображением типа данных.
Как я могу сделать это?
Спасибо
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);}
Также можно настроить 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).
Мы делаем это так, чтобы изображения сохранялись в базе данных в виде больших двоичных объектов (это довольно маленькие изображения, 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();
}
}
Если вы хотите обрабатывать изображения BitmapSource, включая случаи, когда источники изображений не являются файлами, я рекомендую скопировать буфер пикселей в array с последующим сохранением метаданных массива + формата пикселей и размеров (массив и метаданные можно использовать для воссоздания изображения ).