Вставка изображения из файла
Большой двоичный объект (BLOB) можно записать в базу данных в виде двоичных или символьных данных в зависимости от типа поля в источнике данных. Большой двоичный объект — это универсальный термин, который относится к типам данных text , ntext и image , которые обычно содержат документы и изображения.
Чтобы записать значение BLOB в базу данных, выполните соответствующую инструкцию INSERT или UPDATE, передав значение BLOB в качестве входного параметра. Если ваш большой двоичный объект хранится в виде текста, например поле text SQL Server, большой двоичный объект можно передать в виде строкового параметра. Если большой двоичный объект хранится в двоичном формате, например в поле image SQL Server, массив типа byte можно передать как двоичный параметр.
Пример
В следующем примере кода данные о сотрудниках добавляются в таблицу «Сотрудники» в базе данных Northwind. Фотография сотрудника считывается из файла и добавляется в поле «Фото» в таблице, которая является полем изображения.
public static void AddEmployee( string lastName, string firstName, string title, DateTime hireDate, int reportsTo, string photoFilePath, string connectionString) < byte[] photo = GetPhoto(photoFilePath); using (SqlConnection connection = new SqlConnection( connectionString)) SqlCommand command = new SqlCommand( "INSERT INTO Employees (LastName, FirstName, " + "Title, HireDate, ReportsTo, Photo) " + "Values(@LastName, @FirstName, @Title, " + "@HireDate, @ReportsTo, @Photo)", connection); command.Parameters.Add("@LastName", SqlDbType.NVarChar, 20).Value = lastName; command.Parameters.Add("@FirstName", SqlDbType.NVarChar, 10).Value = firstName; command.Parameters.Add("@Title", SqlDbType.NVarChar, 30).Value = title; command.Parameters.Add("@HireDate", SqlDbType.DateTime).Value = hireDate; command.Parameters.Add("@ReportsTo", SqlDbType.Int).Value = reportsTo; command.Parameters.Add("@Photo", SqlDbType.Image, photo.Length).Value = photo; connection.Open(); command.ExecuteNonQuery(); >> public static byte[] GetPhoto(string filePath)
Дальнейшие действия
Как вставить картинку в бд ms sql
БД выглядит так:
Выводит исключение: String or binary data would be truncated.
Я так понял она просто не влазит, если использовать binary(MAX) — то же исключение Это обычная маленькая картинка обложки альбома, путь к ней хранить не вариант, так как она вытаскивается из mp3 файла Какой тип поля в бд использовать?
Отслеживать
zaki hatfild
задан 30 апр 2016 в 11:46
zaki hatfild zaki hatfild
403 5 5 серебряных знаков 16 16 бронзовых знаков
Вопрос напонает вот этот ru.stackoverflow.com/questions/72679/…
30 апр 2016 в 12:10
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Для хранения картинки Вам нужен тип данных varbinary(MAX) . Далее преобразуете картинку в массив байтов и этот массив записываете в БД.
Что бы сохранить картинку в БД, делаем следующее:
1) Преобразуем изображение в массив байт:
var data = File.ReadAllBytes(«путь к картинке»);
2) Массив байт в картинку.
using (var ms = new System.IO.MemoryStream(data)) < using(var img = Image.FromStream(ms)) < >>
P.S. Так же вам в БД может пригодится поле, в котором указан MimeType , он зависит от конкретного расширения картинки его можно посмотреть в интернете. Поэтому на всякий случай, я бы его завел в БД.
Пример для TagLib
1) Получаем картинку
TagLib.File tagFile = TagLib.File.Create(mp3FilePath); MemoryStream ms = new MemoryStream(tagFile.Tag.Pictures[0].Data.Data); System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
2) Получаем массив байт из картинки:
MemoryStream ms = new MemoryStream(); image.Save(ms,System.Drawing.Imaging.ImageFormat.Gif); return ms.ToArray();
3) Аналогично первому примеру, преобразуем массив байт в картинку
using (var ms = new System.IO.MemoryStream(data)) < using(var img = Image.FromStream(ms)) < >>
Добавить картинку в sql таблицу?
Есть бд с именем ProductPicture
нужно запросом заполнить поле Picture которое содержит в себе двоичный массив картинки. Пытаюсь таким вот запросом
UPDATE ProductPicture SET ProductPicture.Picture = CONVERT(varbinary(MAX), 'C:\1.jpg')
но далее следует сообщение об успешно выполнимом запросе но бд по прежнему пуста.
Вопрос: как мне из sql managemet загрузить в ячейку файл(картинку)?
- Вопрос задан более трёх лет назад
- 20686 просмотров
Комментировать
Решения вопроса 1

Константин Цветков @tsklab Куратор тега Transact-SQL
Здесь отвечаю на вопросы.
OPENROWSET.
Решение автора вопроса:
UPDATE
UPDATE PictureProduct SET Picture = (SELECT * FROM OPENROWSET(BULK N'C:\1.jpg', SINGLE_BLOB) AS image) WHERE >INSERT
INSERT INTO PictureProduct (Id, IdProduct, Picture) SELECT 8, 4, BulkColumn FROM Openrowset( Bulk 'C:\2.jpeg', Single_Blob) as image
Ответ написан более трёх лет назад
Нравится 3 1 комментарий
JoraInTheSky @JoraInTheSky Автор вопроса
Благодарю за помощь.
Можете вставить в свой ответ, я отмечу как решение вопроса, возможно кому-то пригодится:
UPDATE
UPDATE PictureProduct SET Picture = (SELECT * FROM OPENROWSET(BULK N'C:\1.jpg', SINGLE_BLOB) AS image) WHERE > INSERT
INSERT INTO PictureProduct (Id, IdProduct, Picture) SELECT 8, 4, BulkColumn FROM Openrowset( Bulk 'C:\2.jpeg', Single_Blob) as image
Ответы на вопрос 0
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- C#
- +2 ещё
Возможно ли получить tcp-сокет в C#-приложении? Или как узнать IP?
- 1 подписчик
- 17 нояб.
- 86 просмотров
Как добавить картинку в таблицу MySQL через SQL запрос
zafar89
Как добавить картинку в таблицу MySQL через SQL запрос
Дополнено (1). Icarstudio
я работаю не в php. Мне надо через MySQL command line client(через командную строку)
Дополнено (2). Японский Городовой
дело в том что в таблице есть поле ‘image’, тип-‘blob’
цьм1995
В таких случаях как правило добавляют название картинки. Например img1.gif
А уже через php используют эти данные для вызова изображения
Icarstudio
Бред! Я про предыдущий ответ.
Создается тип поля BLOB, запрос примерно такой:
$data = file_get_contents($_FILES[‘photo’][‘tmp_name’]);
$data = mysql_real_escape_string($data);
mysql_query(«INSERT INTO $table SET data=’$data'»);
Не забывай еще получать тип картинки (джейпег, пнг и так далее)
В целом не рекомендую такой способ хранения, лучше хранить путь к картинке (можно немолный) и отдавать ее с файловой системы…
UPD:
Тогда вот пример через shell-скрипт:
#!/bin/bash
if [ -z $1 ]
then
echo «usage: insert.sh »
else
SQL=»INSERT INTO file_table (blob_column, filename) VALUES(LOAD_FILE(‘$1’), ‘$1’)»
echo «$SQL» > /tmp/insert.sql
cat /tmp/insert.sql | mysql -u user -p -h localhost db
fi
Японский Городовой
А зачем ее добавлять в в таблицу MySQL?
stopkran
UPDATE ‘table’
SET ‘image’=LOAD_FILE(‘/tmp/img.gif’)
WHERE ‘id’=1;
(пользователю mysql нужна привилегия file)
termes
>как добавить картинку в таблицу MySQL через SQL запрос
Если в MySQL есть такая возможнось, это неозночает что обезятельно надо его использовать, Картинка в БД это как минимум неудобно!
Halfhope
Да, не очень удобно. Проще в бд создавать ссылки на изображения.
- Запрос через phpmyadmin во вкладке SQL работает. При оправки того же запроса через SQL выдает ошибку
- Как добавить поле в таблицу mysql через phpmyadmin?
- Как добавить новое поле в Таблицу MySQL через phpmyadmin
- Как через INSERT правильно добавить строку с данными в таблицу в MySQL, если в 1-м поле (где ID), стоит автоинкремент?
- SQL, запрос добавляющий запись в таблицу + создающий таблицу
Новые вопросы
- Как упорядочивать номера записей в базе данных mysql?
- Код на PHP + mySQL механизм взаимодействия
- MySQL Error Not connection задолбала
- КАК СОЗДАТЬ СТОЛБЕЦ В MYSQL SAMP
- PHP MySQL выдернуть записи и тут же их удалить вернув результат