Как сохранить изображение в базе данных с помощью C # [закрыто]

28
задан r.r 25 August 2010 в 15:02
поделиться

7 ответов

Вам нужно будет сериализовать изображение в двоичный формат, который может храниться в столбце SQL BLOB. Предполагая, что вы используете SQL Server, вот хорошая статья на эту тему:

http://www.eggheadcafe.com/articles/20020929.asp

4
ответ дан 28 November 2019 в 03:37
поделиться

Попробуйте этот метод. Он должен работать, когда поле, в котором вы хотите сохранить изображение, имеет тип байт . Сначала он создает байт [] для изображения. Затем он сохраняет его в БД, используя IDataParameter типа binary .

using System.Drawing;
using System.Drawing.Imaging;
using System.Data;

    public static void PerisitImage(string path, IDbConnection connection)
    {
        using (var command = connection.CreateCommand ())
        {
            Image img = Image.FromFile (path);
            MemoryStream tmpStream = new MemoryStream();
            img.Save (tmpStream, ImageFormat.Png); // change to other format
            tmpStream.Seek (0, SeekOrigin.Begin);
            byte[] imgBytes = new byte[MAX_IMG_SIZE];
            tmpStream.Read (imgBytes, 0, MAX_IMG_SIZE);

            command.CommandText = "INSERT INTO images(payload) VALUES (:payload)";
            IDataParameter par = command.CreateParameter();
            par.ParameterName = "payload";
            par.DbType = DbType.Binary;
            par.Value = imgBytes;
            command.Parameters.Add(par);
            command.ExecuteNonQuery ();
        }
    }
23
ответ дан 28 November 2019 в 03:37
поделиться

Вы захотите преобразовать изображение в байт [] на C #, и тогда у вас будет столбец базы данных как varbinary (MAX)

После этого просто как сохранение любого другого типа данных.

6
ответ дан 28 November 2019 в 03:37
поделиться

Это метод, использующий элемент управления FileUpload в asp.net:

byte[] buffer = new byte[fu.FileContent.Length];
Stream s = fu.FileContent;
s.Read(buffer, 0, buffer.Length);
//Then save 'buffer' to the varbinary column in your db where you want to store the image.
6
ответ дан 28 November 2019 в 03:37
поделиться

Мое личное предпочтение - не сохранять изображения в базе данных как таковой. Сохраните изображение где-нибудь в файловой системе и сохраните ссылку на него в базе данных.

1
ответ дан 28 November 2019 в 03:37
поделиться

вы можете сохранить путь к изображению в базе данных или сохранить само изображение как BLOB (двоичный - массив байтов) .. это зависит от вашего случая, если ваше приложение веб-приложение, то гораздо лучше сохранить путь к изображению. но если у вас есть клиентское приложение, которое подключается к централизованной базе данных, вы должны сохранить его как двоичный файл.

2
ответ дан 28 November 2019 в 03:37
поделиться

Поскольку вы используете SQL, я бы рекомендовал не использовать adhoc ("запись операторов в строках"), особенно учитывая, что вы загружаете изображение.

ADO.NET может сделать за вас всю тяжелую работу по сопоставлению, экранированию и т.д.

Либо создайте хранимую процедуру, либо используйте SqlParameter для привязки.

Как говорят другие авторы, используйте VARBINARY(MAX) в качестве типа хранения - IMAGE упраздняется.

1
ответ дан 28 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: