让我们说如果我捕获屏幕截图.有我的代码
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);
Run Code Online (Sandbox Code Playgroud)
而不是将其保存到图像,我希望能够将其发送到我的SQL或MySQL并将它们作为BLOB存储在数据库中.
我也知道LINQ查询数据库.我不知道的是中间部分.
Data Type在BLOB列中使用什么样的INSERT,我的猜测是它会是Byte[]什么?如果是'Byte',则转换非常简单.
ImageConverter imgc = new ImageConverter();
Byte[] temp = (byte[])imgc.ConvertTo(B_M_P,typeof(byte[]));
Run Code Online (Sandbox Code Playgroud)
以便之后我可以准备我的查询
"INSERT INTO EMPLOYEE (pic) VALUES ('"+temp+"');"
Run Code Online (Sandbox Code Playgroud)
你是正确的,你只需要将其转换为字节数组.表的数据类型应为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.
那Image我在上面提到的数据类型是旧式的BLOB数据类型的例子.
以下是代码应该如何的示例
using(var cmd = SqlCommand("INSERT INTO EMPLOYEE (pic) VALUES (@pic);", connection)
{
cmd.Parameters.Add("@pic", temp);
cmd.ExecuteNonQuery();
}
Run Code Online (Sandbox Code Playgroud)
但是,如果您正在使用大型文件,则会有一些问题,请参阅此SO答案及其链接,以深入了解如何在数据库中存储大型数据对象.
| 归档时间: |
|
| 查看次数: |
3602 次 |
| 最近记录: |