将图片填入到数据库中,核心代码
1.将图片转化为流的形式(转化为byte类型的数据)
//将图片转为流的形式,goods.fileName是图片的地址
byte[] imageData = File.ReadAllBytes(goods.fileName);
2.将imageData赋值给实体(实体接收的属性的数据类型是Byte)
goods.pic = imageData;
将数据库中保存的照片显示出来:
核心代码是将图片的信息放入表中的代码不一样(需要新写一个在SQLHelper层中,只能用来转换图片这个字段,其他的字段不能转换)
public BitmapImage ExecuteQuerypic(string cmdtext, MySqlParameter[] paras, CommandType ct)
{
//实例化数据库的操作,调用GetConn查看数据库是否连接的方法
cmd = new MySqlCommand(cmdtext, GetConn());
BitmapImage newBitmapImage = new BitmapImage();
cmd.CommandType = ct;
cmd.Parameters.AddRange(paras);
sdr = cmd.ExecuteReader();
if (sdr.Read())
{
//读出图片字节数组至byte[]
byte[] imageByte = new byte[sdr.GetBytes(0, 0, null, 0, int.MaxValue)];
sdr.GetBytes(0, 0, imageByte, 0, imageByte.Length);
//将图片字节数组加载入缓冲流
MemoryStream imageStream = new MemoryStream(imageByte);
//将位置设置为流的开头。
imageStream.Seek(0, System.IO.SeekOrigin.Begin);
//用信号通知 BitmapImage 初始化开始。
newBitmapImage.BeginInit();
//获取或设置 BitmapImage 的流的源。
newBitmapImage.StreamSource = imageStream;
//用信号通知 BitmapImage 初始化结束。
newBitmapImage.EndInit();
}
return newBitmapImage; //返回D层
}
最后附加一个添加照片,并将照片显示在image框中,获取图片的地址的代码
private void Button_Click(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
//过滤上传图片的类型
ofd.Filter = "jpg图片|*.jpg";
if (ofd.ShowDialog() == true)
{
//这个是将图片的地址赋值给实体
goods.fileName = ofd.FileName;
//将选中的照片显示在image框中
imgGoods.Source = new BitmapImage(new Uri(ofd.FileName));
}
}