У меня есть таблица с именем tblStaff, столбец с названием staffImage имеет тип данных Image, которому разрешено сохранять значение Null. Если пользователь предоставит свою фотографию, то в этом столбце будет сохранено изображение в виде двоичных данных, а если он не предоставит свое изображение, то онобудет хранить нулевое значение. Если этот столбец имеет нулевое значение, тогда изображение из папки Resource должно отображаться в pictureBox1, а если в этом столбце есть двоичные данные, то изображение, хранящееся в этом столбце в виде двоичных данных, должно отображаться в pictureBox1.
CREATE TABLE tblStaff
(
staffId int not null identity Primary Key,
staffName varchar(50) not null,
staffUserName varchar(25) not null,
staffPassword varchar(30) not null,
staffPhone varchar(15) not null,
staffRole int not null,
staffStatus tinyint not null,
**staffImage image**
)
ALTER PROC [dbo].[sp_GetStaffImage]
@staffId varchar(150)
as
SELECT Stf.staffImage as 'Image' FROM tblStaff Stf WHERE
staffID=@staffId
.
.
.
.
string staffID = Convert.ToString(dataGridViewStaff.Rows[e.RowIndex].Cells["Staff Id"].Value);
..............
.............
..........
...........
SqlConnection con1 = new SqlConnection(cs);
con.Open();
SqlCommand cmd1 = new SqlCommand("sp_GetStaffImage", con);
cmd1.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.AddWithValue("@staffId", staffID);
SqlDataAdapter sda1 = new SqlDataAdapter(cmd1);
DataSet ds = new DataSet();
sda1.Fill(ds);
if(ds.Tables[0].Rows.Count>0)
{
var img = (byte[])ds.Tables[0].Rows[0][0];
if (img != Null) //code if the data in column named staffImage is
Binary data then show the image
in PictureBox1 from the database.
{
MemoryStream ms = new MemoryStream(img);
pictureBox1.Image = new Bitmap(ms);
}
else //code if the data in column named staffImage is Null then show the image in PictureBox1
from Resource folder .
{
pictureBox1.ImageLocation = "Resources/human.png";
}
}
con.Close();
Запустив приведенный выше код, я получил следующее исключение: Невозможно привести объект типа 'System.DBNull'набрать' System.Byte [] '.