图像未保存到数据库
本文关键字:数据库 保存 图像 | 更新日期: 2023-09-27 18:22:05
我正在进行一个测试项目,以便学习和理解C#和WPF。我有一个打开资源管理器窗口的按钮。我想将所选文件(图像)保存到数据库(SQL 2012)中varbinary(max)类型的列中。
我失败了,更新后的带有图像的"selectedCellphone"没有保存到数据库中。在调试时,我注意到对象"saveCellphones"是正确的,属性"Photo"是图像中的字节[]。该方法也不例外。
private void importPhotoButton_Click(object sender, System.Windows.RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Bilddateien (*.png;*.jpeg)|*.png;*.jpeg|Alle Dateien (*.*)|*.*";
ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
ofd.ShowDialog();
byte[] data = System.IO.File.ReadAllBytes(ofd.FileName);
try
{
using (var context = new CellphoneManagerEntities())
{
if (selectedCellphone != null)
{
selectedCellphone.Photo = data;
context.SaveChanges();
}
}
}
catch (System.Data.Entity.Infrastructure.DbUpdateException ex)
{
Console.WriteLine(ex.Message);
}
}
什么是selectedCellPhone
?它没有在您要过帐的代码中定义。
我怀疑您在代码的其他地方使用了selectedCellphone
,并且它是您使用上下文从数据库中检索到的实体。
但是,当您在上下文中调用SaveChanges()
时,这肯定与用于检索selectedCellphone
的上下文不同!
在您正在保存的上下文中没有要保存的更改!
为了保存任何更改,您需要在正在保存的上下文中进行更改。
如果您没有可用的原始上下文,可以这样做:
using (var context = new CellphoneManagerEntities())
{
var updateCellphone = context.CellPhones.FirstOrDefault(x => x.Id == selectedCellphone.Id);
if (updateCellphone != null)
{
updateCellphone.Photo = data;
context.SaveChanges();
}
}
顺便说一句,即使什么都没保存,您也在检索byte[]
。除非你在其他地方使用它,为什么不把它移到你的if
:里面呢
updateCellphone.Photo = System.IO.File.ReadAllBytes(ofd.FileName);