如果我捕获屏幕截图,请说。有我的代码
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
来查询数据库。我不知道的是中间部分。
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+"');"
答案 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及其链接,以深入了解如何在数据库中存储大型数据对象。