c# - 如何在存储在 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"/>
解决方案
您提到的第一个错误:
“图像”不包含“图像”的定义
发生是因为 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)
.
推荐阅读
- python - 我的代码在 mongodb 中工作,但在 pymongo 中不工作
- c - 我应该在 .h 文件中定义函数还是只声明它们?
- javascript - 如何从 react hooks 或 useEffect 获取新的更新数据?
- c# - 从为选定的 wpf 组合框值绑定的属性中获取 null
- react-native - undefined 不是 react-native 中的对象(评估“process.version.split”)
- java - 在webdriver中,复选框必须检查复选框是否选中或选中的基本属性是什么
- javascript - 选项卡未从 reactstrap 导出
- google-apps-script - onFormSubmit 触发器大约每隔几周随机发生两次
- excel - 使代号和索引一致
- javascript - date.getTime 不是 extJS 日期字段列的功能