Изображения, созданные с помощью C # - Как вставить их в BLOB через SQL - PullRequest
1 голос
/ 24 февраля 2012

Допустим, если я сделаю снимок экрана.Для этого есть мой код

int sWidth = 1600, sHeight = 1200;

Bitmap B_M_P = Bitmap(sWidth, sHeight);

Graphics gfx = Graphics.FromImage((Image)B_M_P);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));            

B_M_P.Save("img.jpg", ImageFormat.Jpeg);

. Вместо того, чтобы сохранять его в образ, я хочу отправить его на мой SQL или MySQL и сохранить их в базе данных как BLOB.

Я также знаю LINQ, чтобы запрашивать БД.Чего я не знаю, так это промежуточной части.

  • Какой тип Data Type будет использоваться для вставки в столбец BLOB, я думаю, это будет Byte[]?

если это «байт», то преобразование довольно простое.

ImageConverter imgc = new ImageConverter();
Byte[] temp = (byte[])imgc.ConvertTo(B_M_P,typeof(byte[]));

, чтобы впоследствии я мог подготовить свой запрос

"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
  • Если нет, то ЧТО ТАКОЕ ТИП & КАК ПРЕОБРАЗОВАТЬ

1 Ответ

6 голосов
/ 24 февраля 2012

Вы правы, что вам просто нужно превратить его в байтовый массив.Тип данных вашей таблицы должен быть VarBinary (макс.) .

. Обратите внимание, что существует тип данных Image , но этот тип данных будет удален в будущей версии Microsoft.SQL Server, поэтому Microsoft рекомендует всем перейти на VarBinary для будущей совместимости.


BLOB и VarBinary (макс.) - это одно и то же.Из Общие сведения о VARCHAR (MAX) в SQL Server 2005

Чтобы решить эту проблему, Microsoft представила типы данных VARCHAR (MAX), NVARCHAR (MAX) и VARBINARY (MAX)в SQL Server 2005. Эти типы данных могут содержать одинаковое количество больших двоичных объектов (2 ГБ), и они хранятся на страницах данных того же типа, что и для других типов данных.Когда данные в типе данных MAX превышают 8 КБ, используется страница переполнения.SQL Server 2005 автоматически назначает индикатор переполнения странице и знает, как управлять строками данных так же, как он манипулирует другими типами данных.Вы можете объявлять переменные типов данных MAX внутри хранимой процедуры или функции и даже передавать их как переменные.Вы также можете использовать их внутри строковых функций.

Microsoft рекомендует использовать типы данных MAX вместо больших двоичных объектов в SQL Server 2005. Фактически, большие двоичные объекты в будущих выпусках SQL Server устарели.

То, что Image тип данных, который я упомянул вверху, является примером типа данных BLOB старого стиля.


Вот пример того, как код должен быть

using(var cmd = SqlCommand("INSERT INTO EMPLOYEE (pic) VALUES (@pic);", connection)
{
    cmd.Parameters.Add("@pic", temp);
    cmd.ExecuteNonQuery();
}

Однако есть некоторые замечания, если вы работаете с большими файлами, см. этот ответ SO и его ссылки для более подробного изучения хранения больших объектов данных в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...