Images Created with C# - How to Insert them in BLOB via SQL

依然范特西╮ 提交于 2019-12-04 05:32:46

问题


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

回答1:


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.



来源:https://stackoverflow.com/questions/9437029/images-created-with-c-sharp-how-to-insert-them-in-blob-via-sql

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!