Вам нужно будет сериализовать изображение в двоичный формат, который может храниться в столбце SQL BLOB. Предполагая, что вы используете SQL Server, вот хорошая статья на эту тему:
Попробуйте этот метод. Он должен работать, когда поле, в котором вы хотите сохранить изображение, имеет тип байт
.
Сначала он создает байт []
для изображения. Затем он сохраняет его в БД, используя 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 ();
}
}
Вы захотите преобразовать изображение в байт []
на C #, и тогда у вас будет столбец базы данных как varbinary (MAX)
После этого просто как сохранение любого другого типа данных.
Это метод, использующий элемент управления 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.
Мое личное предпочтение - не сохранять изображения в базе данных как таковой. Сохраните изображение где-нибудь в файловой системе и сохраните ссылку на него в базе данных.
вы можете сохранить путь к изображению в базе данных или сохранить само изображение как BLOB (двоичный - массив байтов) .. это зависит от вашего случая, если ваше приложение веб-приложение, то гораздо лучше сохранить путь к изображению. но если у вас есть клиентское приложение, которое подключается к централизованной базе данных, вы должны сохранить его как двоичный файл.
Поскольку вы используете SQL, я бы рекомендовал не использовать adhoc ("запись операторов в строках"), особенно учитывая, что вы загружаете изображение.
ADO.NET может сделать за вас всю тяжелую работу по сопоставлению, экранированию и т.д.
Либо создайте хранимую процедуру, либо используйте SqlParameter для привязки.
Как говорят другие авторы, используйте VARBINARY(MAX) в качестве типа хранения - IMAGE упраздняется.