假设我捕获了一个屏幕截图。这是我的代码
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查询数据库。我不知道是中间部分。
LINQ
Data Type
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)
为了解决此问题,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。
为了解决此问题,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数据类型的例子。
Image
这是代码应为的示例
using(var cmd = SqlCommand("INSERT INTO EMPLOYEE (pic) VALUES (@pic);", connection) { cmd.Parameters.Add("@pic", temp); cmd.ExecuteNonQuery(); }