Как вставить картинку в sql таблицу
Перейти к содержимому

Как вставить картинку в sql таблицу

  • автор:

Вставка изображения из файла

Большой двоичный объект (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 таблицу?

48d2e39547e544df926dcc296c387500.JPG

Есть бд с именем ProductPicture
нужно запросом заполнить поле Picture которое содержит в себе двоичный массив картинки. Пытаюсь таким вот запросом

UPDATE ProductPicture SET ProductPicture.Picture = CONVERT(varbinary(MAX), 'C:\1.jpg')

но далее следует сообщение об успешно выполнимом запросе но бд по прежнему пуста.
Вопрос: как мне из sql managemet загрузить в ячейку файл(картинку)?

  • Вопрос задан более трёх лет назад
  • 20686 просмотров

Комментировать

Решения вопроса 1

tsklab

Константин Цветков @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#

  • 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 выдернуть записи и тут же их удалить вернув результат

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *