当前位置: 首页 > 面试题库 >

用C#创建的图像-如何通过SQL将其插入BLOB

邢献
2023-03-14
问题内容

假设我捕获了一个屏幕截图。这是我的代码

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在BLOB列中将使用哪种类型的INSERT插入,我猜这将是一个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。

Image我在上面提到的数据类型是旧式的BLOB数据类型的例子。

这是代码应为的示例

using(var cmd = SqlCommand("INSERT INTO EMPLOYEE (pic) VALUES (@pic);", connection)
{
    cmd.Parameters.Add("@pic", temp);
    cmd.ExecuteNonQuery();
}

但是,如果您正在使用大文件,则有些问题,请参阅此SO解答及其链接,以深入了解如何在数据库中存储大数据对象。



 类似资料:
  • 我用C#在屏幕外生成一堆SSRS报告,然后把每个报告的图像粘贴到一个PowerPoint演示文稿中,有效地将所有报告整理成一个包。虽然这样做很好,但对于一个26页的演示文稿,它的文件大小只有23mb。(我明白,使用高dpi在一定程度上导致了这个巨大的数字,但事实证明,这是创建所需清晰度的图像所必需的)。 但是,当我将此演示文稿手动保存在PowerPoint中时,文件大小会减小到大约13mb。(这是

  • 我在PostgreSql中创建了一个表books。 我的Json: 如何通过java代码将json插入Postgres?

  • 问题内容: 我一直在这墙上撞了一段时间。我知道您可以用C#代码创建一个存储过程,就可以了。但是我不知道的是,然后我可以将该存储过程 保存 到SQL Server上 ,但是可以通过C#代码完成吗? 场景是:我想通过代码创建一个测试数据库,然后想向新创建的测试数据库(服务器端)添加存储过程-同样,所有操作都通过相同的C#代码项目完成。 问题答案: 是的,这是可能的。在这里,我给你一个例子。 没有实体框

  • 问题内容: 想通过一个简单的 sql 脚本(例如填充测试数据库)将文件插入到 BLOB 字段中。我知道如何通过代码做到这一点,但我找不到如何执行 sql 脚本本身。 我试图通过路径,即 但这失败了。 在代码中(例如 java),很容易创建一个 File 对象并将其传入,但是直接从 sql 脚本中,我被卡住了...... 任何想法? 问题答案: 为了测试,您可以插入文字十六进制字节或使用该函数,如下

  • 需要有关通过api将文件插入google驱动器的帮助。为此目的的api留档没有明确解释如何通过超文本传输协议post请求发送文件的实际正文。

  • 我正在尝试将我的位图图像插入MySQL,但问题是位图不受支持。我的错误:“System.NotSupportedException:‘不支持参数类型位图;请参阅https://fl.vu/mysql-param-type.value:System.Drawing.Bitmap’”。MySQL中的图片数据类型是blob。我想知道是否应该更改数据类型? 我的按钮注册表