小编典典

用C#创建的图像-如何通过SQL将其插入BLOB

sql

假设我捕获了一个屏幕截图。这是我的代码

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列中将使用哪种类型的INSERT插入,我猜这将是一个Byte[]

如果它是一个“字节”,则转换非常容易。

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

这样以后我就可以准备查询了

"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
  • 如果不是,那是 什么类型 以及 如何转换

阅读 208

收藏
2021-04-14

共1个答案

小编典典

您是正确的,您只需要将其上移到字节数组即可。表的数据类型应为VarBinary(max)

请注意,这里有一个Image数据类型,但是在将来的Microsoft SQL
Server版本中将删除该数据类型,因此Microsoft建议所有人都切换到VarBinary,以实现将来的兼容性。


BLOB和VarBinary(max)是同一件事。从了解SQL Server
2005中的VARCHAR(MAX)

为了解决此问题,Microsoft在SQL Server
2005中引入了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)数据类型。这些数据类型可以容纳相同数量的数据,BLOB可以容纳(2
GB),它们分别是存储在用于其他数据类型的相同类型的数据页中。当MAX数据类型中的数据超过8 KB时,将使用溢出页面。SQL Server
2005自动为页面分配一个溢出指示器,并且知道如何像处理其他数据类型一样操作数据行。您可以在存储过程或函数中声明MAX数据类型的变量,甚至将它们作为变量传递。您也可以在字符串函数中使用它们。

Microsoft建议在SQL Server 2005中使用MAX数据类型代替BLOB。实际上,在SQL Server的未来版本中不建议使用BLOB。

Image我在上面提到的数据类型是旧式的BLOB数据类型的例子。


这是代码应为的示例

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