我这样保存图像:
//This is in my ImageConverter class:
public static byte[] ConvertImageToByteArray(Image userImage) //Get bytes of the image
{
using (MemoryStream ms = new MemoryStream())
using (Bitmap tempImage = new Bitmap(userImage))
{
tempImage.Save(ms, userImage.RawFormat);
return ms.ToArray();
}
}
//this is in my save button:
sqlCmd.Parameters.Add("@user_image", SqlDbType.VarBinary, 8000).Value =
ImageConverter.ConvertImageToByteArray(pictureBox1.Image);
我通过单击datagridview来检索图像,如下所示:
private void dgvEmpDetails_CellClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (e.RowIndex != -1)
{
//Display user image
using (SqlConnection con = new SqlConnection(connectionStringConfig))
using (SqlCommand sqlCmd = new SqlCommand(
"SELECT user_image FROM dbo.Employee_Image
WHERE employee_id=@employee_id", con))
{
con.Open();
sqlCmd.Parameters.Add("@employee_id",
SqlDbType.NVarChar).Value = EmployeeId;
using (SqlDataReader reader = sqlCmd.ExecuteReader())
{
if (reader.HasRows)
{
reader.Read();
pictureBox1.Image = ImageConverter.
ConvertByteArrayToImage((byte[])(reader.GetValue(0)));
}
else
{
pictureBox1.Image = null;
}
}
}
}
}
catch (Exception ex)
{
MessageBox.Show($"Something is wrong with the selected record!
\nError: { ex.Message }");
}
}
//This is in my ImageConverter class:
public static Image ConvertByteArrayToImage(byte[] buffer) //Get image from database
{
using (MemoryStream ms = new MemoryStream(buffer))
{
return Image.FromStream(ms);
}
}
**注意:**我没有在datagridview中显示图像的二进制数据。
保存和更新图像(使用用户记录)工作正常。
将图像保存到数据库后,它无法正常显示。但当我使用OpenFileDialog加载它时,图像显示得很好。
使用OpenFileDialog加载图像:
当我单击datagridview行以查看用户记录时,pictureBox如下所示:
为什么这是分裂在某种排序?我还没有看到任何类似的问题/解决方案关于这一点。其中大部分是关于“加载图像从数据库到pictureBox”。但我已经这样做了。
3条答案
按热度按时间6qftjkof1#
请尝试使用MemoryStream.Write方法。
更改此项:
更改为:
xfb7svmp2#
这是我从数据库获取图像的方法
这是我的dbserver类,它与数据库通信。
我希望这能解决问题。
这是我用于我的数据库图像检索器。
8xiog9wr3#
下面是一个完整的解决方案,它似乎可以与SQL Server Express/SQL Server一起使用:
注意:当数据库中的表被创建时,列
User_Image
应该被创建为varbinary(MAX)
从文件读取图像并作为byte[]返回:
注意:我已经提供了3种不同的方法来读取图像文件并返回byte[]。
GetImageFromFile
似乎生成了一个字节数组,它的字节数与原始的相同(用.jpg测试),而GetImageFromFilev2
和GetImageFromFilev3
的字节数较少。更多信息请参见How to convert image to byte array。从数据库读取图像数据:
将图像数据保存到数据库
将图像上载到数据库
要在PictureBox中显示图像(例如:图片框1)
资源: