从数据库将图像加载到面板中

时间:2012-04-02 17:47:36

标签: c# database winforms image-loading

我的应用程序将图像数据保存在数据库中,当将信息加载到表单中时,它会将图像加载到面板中。这工作正常。但是如果用户不想保存图像,我在数据库中的图像字段(varbinary)中插入了'0'。从数据库加载此信息(0x00000000)时,它会引发以下异常:

“参数无效。”

我在这里提供一些代码:

将图像保存在数据库中:

if(user has selected an image)
{
   Byte[] imageBytes = File.ReadAllBytes(imagePatient);
   sqlCommand.Parameters.AddWithValue("Img", imageBytes); //Img is database column for images
}
else
{
   sqlCommand.Parameters.AddWithValue("Img", 0);
}

从数据库加载图片:

Byte[] imageData = new Byte[0];
imageData = (Byte[])(dataSet.Tables["Patients"].Rows[0]["Img"]);
MemoryStream stream = new MemoryStream(imageData);
panelImage.BackgroundImage = Image.FromStream(stream);

当且仅当数据不是零形式时,我试图进行一些允许加载BackgroundImage的检查。

请告诉我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会存储NULL而不是0

if(user has selected an image) 
{ 
   Byte[] imageBytes = File.ReadAllBytes(imagePatient); 
   sqlCommand.Parameters.AddWithValue("Img", imageBytes); //Img is database column for images 
} 
else 
{ 
    sqlCommand.Parameters.Add("Img", SqlDbType.VarBinary, -1 );
    sqlCommand.Parameters["Img"].Value = DbNull.Value;
} 

然后使用if语句检查它是否为非空:

Byte[] imageData = new Byte[0]; 
imageData = (Byte[])(dataSet.Tables["Patients"].Rows[0]["Img"]); 
if(imageData != null)
{
    MemoryStream stream = new MemoryStream(imageData); 
    panelImage.BackgroundImage = Image.FromStream(stream); 
}

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparametercollection.addwithvalue.aspx