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

Как добавить картинку в базу данных sql

  • автор:

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

Большой двоичный объект (BLOB) можно записать в базу данных в виде двоичных или символьных данных в зависимости от типа поля в источнике данных. Большой двоичный объект — это универсальный термин, который относится к типам данных text , ntext и image , которые обычно содержат документы и изображения.

Чтобы записать значение BLOB в базу данных, выполните соответствующую инструкцию INSERT или UPDATE и передайте значение BLOB в качестве входного параметра (см. раздел «Настройка параметров и типов данных параметров»). Если ваш большой двоичный объект хранится в виде текста, например поле text SQL Server, большой двоичный объект можно передать в виде строкового параметра. Если большой двоичный объект хранится в двоичном формате, например в поле image SQL Server, массив типа byte можно передать как двоичный параметр.

Пример

В следующем примере кода данные о сотрудниках добавляются в таблицу «Сотрудники» в базе данных Northwind. Фотография сотрудника считывается из файла и добавляется в поле «Фото» в таблице, которая является полем изображения.

Public Shared Sub AddEmployee( _ lastName As String, _ firstName As String, _ title As String, _ hireDate As DateTime, _ reportsTo As Integer, _ photoFilePath As String, _ connectionString As String) Dim photo() as Byte = GetPhoto(photoFilePath) Using connection As SqlConnection = New SqlConnection( _ connectionString) Dim command As SqlCommand = 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() End Using End Sub Public Shared Function GetPhoto(filePath As String) As Byte() Dim stream As FileStream = new FileStream( _ filePath, FileMode.Open, FileAccess.Read) Dim reader As BinaryReader = new BinaryReader(stream) Dim photo() As Byte = reader.ReadBytes(stream.Length) reader.Close() stream.Close() Return photo End Function 
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)

См. также

  • Использование команд для изменения данных
  • Извлечение двоичных данных
  • Двоичные данные и данные больших значений SQL Server
  • Сопоставления типов данных SQL Server
  • Общие сведения об ADO.NET

Как вставить картинку в бд ms sql

БД выглядит так: введите сюда описание изображения Выводит исключение: String or binary data would be truncated. введите сюда описание изображения Я так понял она просто не влазит, если использовать binary(MAX) — то же исключение Это обычная маленькая картинка обложки альбома, путь к ней хранить не вариант, так как она вытаскивается из mp3 файла Какой тип поля в бд использовать?

Отслеживать
zaki hatfild
задан 30 апр 2016 в 11:46
zaki hatfild zaki hatfild
413 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

Насколько я знаю, непосредственно в базе данных нельзя сохранять картинки, так как они обычно занимают много места и представляют собой бинарные данные. Вместо этого, обычно картинки сохраняются на диске или в облаке, а в базе данных сохраняется только ссылка на файл.

Для сохранения ссылки на файл в базе данных, нужно создать таблицу, которая будет содержать информацию о картинках, например, название, путь к файлу и описание. Для добавления новой картинки в базу данных необходимо выполнить следующие шаги:

  1. Сохранить картинку на диске или в облаке и получить ее путь или ссылку.
  2. Открыть соединение с базой данных и выполнить SQL-запрос на вставку новой записи в таблицу картинок. Пример SQL-запроса:

Также можно использовать специальные библиотеки для работы с базами данных, которые могут облегчить процесс вставки картинок в базу данных.

Добавить картинку в sql таблицу?

48d2e39547e544df926dcc296c387500.JPG

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

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

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

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

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

Решения вопроса 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

Ваш ответ на вопрос

Войдите, чтобы написать ответ

windows-server

  • Windows Server
  • +2 ещё

Как разрешить доступ к MS SQL (named instance) серверу за WIndows Firewall?

  • 4 подписчика
  • 29 апр.
  • 1144 просмотра

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

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