У меня есть программа на C#, которая читает из файла JPG и записывает в мою базу данных SQL Server.C# Image.FromFile и Save on DB Разница в размере
Это мой кусок кода:
string cSQL =
"INSERT INTO xxx (ID, Image) " +
"VALUES (@ID, @Image) ";
using (SqlConnection conn = new SqlConnection("xxx"))
{
Image image = Image.FromFile(string.Format(@"{0}\{1}.jpg", source, ID));
SqlParameter[] parametros = new SqlParameter[] {
new SqlParameter("@ID", ID),
new SqlParameter("@Image", ImageToByteArray(img))
};
SqlCommand cmd = new SqlCommand(cSQL, conn);
conn.Open();
cmd.Parameters.AddRange(parametros);
return cmd.ExecuteNonQuery() > 0;
}
public static byte[] ImageToByteArray(Image image)
{
if (image == null) return null;
MemoryStream mStream = new MemoryStream();
image.Save(mStream, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] ret = mStream.ToArray();
mStream.Close();
return ret;
}
Этот код работает хорошо, но проблема в том, размер поля в моей базе данных.
Например, вот сравнительный из размера VARBINARY (максимум) в моем дб и размер в килобайтах из Jpeg изображений:
Как вы можете видеть, размер файл и размер моего поля varbinary (max) являются су-разными!
Я делаю что-то неправильно?
PS: Я использую функцию SQL Server DALENGTH (Image), чтобы получить размер поля.
Не могли бы вы привести пример того, как я изменил бы свой код? –
Ну, вы уже делаете большую часть работы. Прочитайте файл в потоке и используйте «BinaryReader», чтобы вывести байты. Отправьте вывод в массив, и все готово. –
благодарит за вашу помощь. Теперь он работает хорошо. Вот код, который я использовал: –