首页 > 解决方案 > 如何在存储在 SQL Server 数据库中的图像框中显示图像?

问题描述

我有一堆图像存储在 SQL Server 数据库中,我希望能够在 WPF 应用程序加载后显示这些图像。我一直在做很多研究,最接近解决这个问题的是我拥有的代码在下面找到,但我什至不确定这是否正确并且到目前为止它不起作用。

代码:

public MainWindow()
{
        InitializeComponent();

        SqlConnection sqlConnection = new SqlConnection(@"Data Source=LAPTOP-3SCT3MQA\SQLEXPRESS;Initial Catalog=RareMantis;Integrated Security=True");

        SqlDataAdapter dataAdapter = new SqlDataAdapter(new SqlCommand("SELECT GameCover FROM tblGames WHERE GameID = 1", sqlConnection));
        DataSet dataSet = new DataSet();
        dataAdapter.Fill(dataSet);

        if (dataSet.Tables[0].Rows.Count == 1)
        {
            Byte[] data = new Byte[0];
            data = (Byte[])(dataSet.Tables[0].Rows[0]["GameCover"]);
            MemoryStream mem = new MemoryStream(data);            
            // GameCover1.Image = System.Drawing.Image.FromStream(mem); 
            //              ^ this word(Image) is causing an error 
        }
}
 <Image x:Name="GameCover1"  HorizontalAlignment="Left" Height="226" Margin="36,314,0,-1.6" VerticalAlignment="Top" Width="411"/>

标签: c#sqlsql-serverwpfimage

解决方案


您提到的第一个错误:

“图像”不包含“图像”的定义

发生是因为 WPF 控件Image没有名为“图像”的属性。相反,您需要使用该Source属性。

MarcBernier 试图将二进制数据从 SQL 转换为可用的图像,但他提供的方法是针对 Winforms,而不是 WPF。由于两者不兼容,您会从评论中得到第二个错误:

无法将类型“System.Drawing.Image”隐式转换为“System.Windows.Media.ImageSource”

正如它所指出的,您需要一个ImageSource对象。经过一番研究,我遇到了另一个 stackoverflow 问题,其答案也应该对您有所帮助。尝试这个:

GameCover1.Image = BitmapFrame.Create(mem, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);

最后一点,pmbAustin 是正确的,您不应该再使用 SQLimage类型。此解决方案在切换到varbinary(MAX).


推荐阅读