Загрузка изображения в панель из базы данных - PullRequest
0 голосов
/ 02 апреля 2012

Мое приложение сохраняет данные изображения в базе данных и при загрузке информации в форму загружает изображение в панель. Это работает нормально. Но в случае, если пользователь не хочет сохранять изображение, я вставил «0» в поле изображения (varbinary) в базе данных. При загрузке этой информации (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 Ответ

1 голос
/ 02 апреля 2012

Я бы хранил 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

...