图像未保存到数据库

本文关键字:数据库 保存 图像 | 更新日期: 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);