Как загрузить картинку из access db в picturebox
я получаю ошибку на линии
ImageByte = comm.ExecuteScalar();
ошибка заключается в следующем
"Cannot implicitly convert type 'object' to 'byte[]'. An explicit conversion exists (are you missing a cast?)"
Что я уже пробовал:
byte[] ImageByte = null; MemoryStream MemStream = null; PictureBox PicBx = new PictureBox(); object OB; string WorkingDirectory = Application.StartupPath + "\\"; connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + WorkingDirectory + "DBFile.mdb; Persist Security Info=True"; cnction = new OleDbConnection(connString); cnction.Open(); int ImageID = 6; sqlCommand = "SELECT ImageObject FROM ImagesTable WHERE ImageID = " + ImageID + ""; comm = new OleDbCommand(sqlCommand, cnction); ImageByte = comm.ExecuteScalar(); MemStream = new MemoryStream(ImageByte); PicBx.Image = Image.FromStream(MemStream); }
Richard Deeming
sqlCommand = "SELECT ImageObject FROM ImagesTable WHERE ImageID = " + ImageID + "";
Не делай этого так!
Пока в этот конкретный экземпляр, так как параметр является
int
, вы избежали a SQL-инъекция[^] уязвимость, построение ваших запросов таким образом-это все еще очень плохая привычка, чтобы попасть в нее.НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
const string sqlCommand = "SELECT ImageObject FROM ImagesTable WHERE ImageID = ?"; using (OleDbCommand comm = new OleDbCommand(sqlCommand, cnction)) { comm.Parameters.AddWithValue("ImageID", ImageID); byte[] imageBytes = (byte[])comm.ExecuteScalar(); MemoryStream ms = new MemoryStream(imageBytes); PicBx.Image = Image.FromStream(ms); }