使用C#创建的映像 - 如何通过SQL将它们插入BLOB中

Moo*_*oon 1 c# sql blob

让我们说如果我捕获屏幕截图.有我的代码

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);
Run Code Online (Sandbox Code Playgroud)

而不是将其保存到图像,我希望能够将其发送到我的SQL或MySQL并将它们作为BLOB存储在数据库中.

我也知道LINQ查询数据库.我不知道的是中间部分.

  • Data Type在BLOB列中使用什么样的INSERT,我的猜测是它会是Byte[]什么?

如果是'Byte',则转换非常简单.

ImageConverter imgc = new ImageConverter();
Byte[] temp = (byte[])imgc.ConvertTo(B_M_P,typeof(byte[]));
Run Code Online (Sandbox Code Playgroud)

以便之后我可以准备我的查询

"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
Run Code Online (Sandbox Code Playgroud)
  • 如果不是那么什么是类型如何转换

Sco*_*ain 6

你是正确的,你只需要将其转换为字节数组.表的数据类型应为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();
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您正在使用大型文件,则会有一些问题,请参阅此SO答案及其链接,以深入了解如何在数据库中存储大型数据对象.