Images Created with C# - How to Insert them in BLO

2019-03-01 14:37发布

Let's say if I capture a screen shot. There is my code for it

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);

instead of saving this to an Image, i wanna be able to send this to my SQL or MySQL and store them in the database as BLOB.

i know the LINQ as well to query the DB. What i don't know is the intermediate portion.

  • What kind of Data Type will be used to INSERT in a BLOB column, my guess is it will be a Byte[]?

if it is a 'Byte', then the conversion is pretty easy.

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

so that afterwards i can prepare my query

"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
  • If not then WHAT IS THE TYPE & HOW TO CONVERT

标签: c# sql blob
1条回答
\"骚年 ilove
2楼-- · 2019-03-01 15:32

Your are correct that you just need to turn it in to a byte array. The datatype of your table should be VarBinary(max).

Note that there is a Image datatype, but that datatype will be removed in a future version of Microsoft SQL Server, so Microsoft is recommending everyone switch to VarBinary for future compatibility.


BLOBs and VarBinary(max) are the same thing. From Understanding VARCHAR(MAX) in SQL Server 2005

To solve this problem, Microsoft introduced the VARCHAR(MAX), NVARCHAR(MAX), and VARBINARY(MAX) data types in SQL Server 2005. These data types can hold the same amount of data BLOBs can hold (2 GB) and they are stored in the same type of data pages used for other data types. When data in a MAX data type exceeds 8 KB, an over-flow page is used. SQL Server 2005 automatically assigns an over-flow indicator to the page and knows how to manipulate data rows the same way it manipulates other data types. You can declare variables of MAX data types inside a stored procedure or function and even pass them as variables. You can also use them inside string functions.

Microsoft recommend using MAX data types instead of BLOBs in SQL Server 2005. In fact, BLOBs are being deprecated in future releases of SQL Server.

That Image data type I mentioned at the top is a example of the old-style BLOB datatype.


Here is a example of how the code should be

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

However there are some Gotchas if you are working with large files, see this SO answer and its links for in depth look at storing large data objects in the database.

查看更多
登录 后发表回答