我已经用谷歌搜索了如何在数据库中存储图像的基本问题,并找到了许多示例。但是,我看到的所有答案(例如this)似乎都使用 SQLCommand 作为解决方案,无论他们是使用较旧的“图像”类型、文本还是建议 VARCHAR(MAX)。我正在使用 SQL 2008 和 SQL 2012
我无法将其合并到我的应用程序中,因为我有一个旧版 dll,它将执行一些其他工作,然后存储我的图像。我想把它包装成一个 SQL 事务。挑战在于 DLL 对我来说本质上是一个黑盒,因为我无法更改源代码。Dll 公开了一个可选 SQL 语句的参数,它可以作为其事务的一部分运行。
DLL 的结构是这样的:
Public Class MyClass
Public Property ExtraSQL as string
Public Function DoWork
Dim sMainSQL as String
'Start A transaction
Execute(sMainSQL)
If ExtraSQL <> "" Then
Execute(ExtraSQL)
End If
If OK Then Commit Transaction
End Function
End Class
我的目标是将 SQL 字符串输入属性 ExtraSQL,但我不确定如何执行此操作,因为所有示例都指示 SqlCommand.Parameters(@Image).Value = byteArray()。我正在从 Web 服务获取图像数据。在其生命周期中,它被格式化为图像、base64 编码字符串、内存流和字节数组,因此类型之间的转换不是问题。我只是不清楚这样做的最干净的语法。最好只使用我原来的 base64 字符串并执行以下操作:
INSERT INTO tblImage (ImageData) Values ('Base64 blah blah')
然后每当我读回图像时,请执行以下操作:
Public Function Base64ToImage(ByVal base64String As String) As System.Drawing.Image
Dim img As System.Drawing.Image = Nothing
Try
'Convert Base64 string to byte array
Dim btImage As Byte() = Convert.FromBase64String(base64String)
Dim ms As New IO.MemoryStream(btImage, 0, btImage.Length)
ms.Write(btImage, 0, btImage.Length)
img = System.Drawing.Image.FromStream(ms, True)
Catch ex As Exception
End Try
Return img
End Function
我将不胜感激任何支持链接、示例和建议。先感谢您。