假设我捕获屏幕截图。有我的代码
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
将用于 INSERT 到 BLOB 列中,我的
我猜这将是一个Byte[]
?
如果它是一个“字节”,那么转换非常容易。
ImageConverter imgc = new ImageConverter();
Byte[] temp = (byte[])imgc.ConvertTo(B_M_P,typeof(byte[]));
以便之后我可以准备我的查询
"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
您是正确的,您只需将其转换为字节数组即可。表的数据类型应该是变量二进制(最大).
请注意,有一个Image数据类型,但该数据类型将在 Microsoft SQL Server 的未来版本中删除,因此 Microsoft 建议每个人都切换到 VarBinary 以实现未来的兼容性。
BLOB 和 VarBinary(max) 是同一件事。从了解 SQL Server 2005 中的 VARCHAR(MAX)
为了解决这个问题,微软推出了VARCHAR(MAX),
SQL Server 2005 中的 NVARCHAR(MAX) 和 VARBINARY(MAX) 数据类型。
数据类型可以容纳与 BLOB 可以容纳的数据量相同的数据 (2 GB)
它们存储在用于其他数据的相同类型的数据页中
类型。当MAX数据类型的数据超过8KB时,就会出现溢出页
用过的。 SQL Server 2005 自动分配一个溢出指示器
页面并知道如何以与它相同的方式操作数据行
操作其他数据类型。您可以声明 MAX 数据的变量
存储过程或函数中的类型,甚至将它们传递为
变量。您还可以在字符串函数中使用它们。
Microsoft 建议在 SQL Server 2005 中使用 MAX 数据类型而不是 BLOB。事实上,BLOB 在未来版本中已被弃用。
SQL 服务器。
That Image
我在顶部提到的数据类型是旧式 BLOB 数据类型的一个示例。
这是代码应该如何写的示例
using(var cmd = SqlCommand("INSERT INTO EMPLOYEE (pic) VALUES (@pic);", connection)
{
cmd.Parameters.Add("@pic", temp);
cmd.ExecuteNonQuery();
}
但是,如果您正在处理大文件,则会出现一些问题,请参阅这个答案及其深入研究在数据库中存储大型数据对象的链接。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)