【发布时间】:2013-09-12 12:29:18
【问题描述】:
我正在编写一个需要在数据库中存储图像的 VB 应用程序。用户在他们的计算机上选择图像,这将路径作为字符串提供给我。这是我的尝试,但是我收到错误“INSERT INTO 查询不能包含多值字段。”
这是我的代码:
Dim buff As Byte() = Nothing
Public Function ReadByteArrayFromFile(ByVal fileName As String) As Byte()
Dim fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs)
Dim numBytes As Long = New FileInfo(fileName).Length
buff = br.ReadBytes(CInt(numBytes))
Return buff
End Function
Sub ....
Dim connImg As New OleDbConnection
Dim sConnString As String
Dim cmdImg As New OleDbCommand
sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & My.Settings.DB & ";Persist Security Info=False;"
connImg = New OleDbConnection(sConnString)
connImg.Open()
cmdImg.Connection = connImg
cmdImg.CommandType = CommandType.Text
If d.slogo <> "" Then
cmdImg.CommandText = "INSERT INTO Logo ( refId, [type], [img] ) VALUES(@refId, @type, @imgBinary)"
cmdImg.Parameters.Add("@refId", OleDbType.Double).Value = refId
cmdImg.Parameters.Add("@type", OleDbType.Double).Value = 0
cmdImg.Parameters.Add("@imgBinary", OleDbType.VarBinary).Value = ReadByteArrayFromFile(PathToImage)
cmdImg.ExecuteNonQuery()
End If
....
End Sub
我已经尝试在网上搜索其他解决方案,但我找到的似乎都是 VB6 或 VBA 代码。而且我知道人们会争辩说图像不应该存储在数据库中,但在这种情况下,这是我唯一的选择。
感谢您的帮助!
【问题讨论】:
-
您介意分享您的表和任何相关表的架构吗?
-
对不起,我不能 100% 确定您在寻找什么,但我会尽力而为:在这个 Logo 表中,有 3 个字段。 refId 并键入“数字”。 img 作为“附件”。 refId 只是一个 ID,它链接到另一个表中的 productId。每个产品都会附有不同的图片(想想杂志中的广告和封面图片)。现在只有2个,但以后会增加。 refId 和 type 组合为主键。
-
您遇到的问题是 refID 而不是图像。我已经有一段时间没有进行 Access 开发了,但我进行了一些谷歌搜索,并且有一些方法可以绕过这个多值列。
-
如果我在没有 img 字段的情况下运行查询,它工作正常。我不认为这是 refID。
标签: database vb.net attachment oledbcommand ms-access-2013