用C#创建的图像-如何通过SQL将它们插入BLOB中
本文关键字:插入 BLOB SQL 何通过 创建 图像 | 更新日期: 2023-09-27 18:25:39
假设我捕获了一个屏幕截图。这是我的代码
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
来查询DB。我不知道的是中间部分。
- 什么类型的
Data Type
将用于在BLOB列中插入,我的猜测它会是Byte[]
吗
如果它是一个"字节",那么转换就很容易了。
ImageConverter imgc = new ImageConverter();
Byte[] temp = (byte[])imgc.ConvertTo(B_M_P,typeof(byte[]));
这样之后我就可以准备我的查询
"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
- 如果不是,则类型是什么&如何转换
您只需要将其转换为字节数组,这是正确的。表的数据类型应为VarBinary(max)。
请注意,有一个Image数据类型,但该数据类型将在未来版本的Microsoft SQL Server中删除,因此Microsoft建议所有人都切换到VarBinary以获得未来的兼容性。
BLOB和VarBinary(max)是一回事。从理解SQL Server 2005 中的VARCHAR(MAX)
为了解决这个问题,微软推出了VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)数据类型。这些数据类型可以容纳BLOB可以容纳的相同数量的数据(2GB),并且它们存储在用于其他数据的相同类型的数据页中类型。当MAX数据类型中的数据超过8KB时,溢出页面为习惯于SQL Server 2005自动为页面,并知道如何以相同的方式操作数据行操纵其他数据类型。您可以声明MAX数据的变量存储过程或函数中的类型,甚至将它们作为变量。您也可以在字符串函数中使用它们。
Microsoft建议在SQLServer2005中使用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();
}
然而,如果您使用的是大文件,也有一些Gotcha,请参阅此SO答案及其链接,以深入了解如何在数据库中存储大数据对象。