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

时间:2012-02-24 19:44:35

标签: 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);

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

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

  • 我将在BLOB列中使用哪种Data Type进行INSERT 猜是它会是Byte[]

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

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

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

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

1 个答案:

答案 0 :(得分:6)

你是正确的,你只需要把它变成一个字节数组。表格的数据类型应为VarBinary(max)

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


BLOB和VarBinary(max)是一回事。来自Understanding VARCHAR(MAX) in SQL Server 2005

  

为了解决这个问题,微软推出了VARCHAR(MAX),   SQL Server 2005中的NVARCHAR(MAX)和VARBINARY(MAX)数据类型。这些   数据类型可以容纳BLOB可容纳的相同数量的数据(2 GB)和   它们存储在用于其他数据的相同类型的数据页中   类型。当MAX数据类型的数据超过8 KB时,会出现溢出页面   用过的。 SQL Server 2005自动为其分配溢出指示符   该页面并且知道如何以相同的方式操纵数据行   操纵其他数据类型。您可以声明MAX数据的变量   存储过程或函数内部的类型,甚至将它们作为传递   变量。您也可以在字符串函数中使用它们。

     

Microsoft建议在SQL Server 2005中使用MAX数据类型而不是BLOB。事实上,BLOB在以后的版本中被弃用   SQL Server。

我在顶部提到的Image数据类型是旧式BLOB数据类型的示例。


以下是代码应如何

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

但是,如果您正在处理大型文件,可能会有一些问题,请参阅this SO answer及其链接,以深入了解如何在数据库中存储大型数据对象。