齿轮: MS Access 2016, SQL Server 2014
语言 VBA, T-SQL
问题: 该项目是一个“商店”,使用MS ACCESS作为连接到SQL Server的前端,当向数据库(SQL Server数据库)添加项目时,我还需要添加项目的图像。所以我之前做的是能够将独立图像添加到数据库中的Images表,该表有2个字段,AUTO id为整数,ImageData为VARBINARY(MAX)。
为了将图像添加到数据库,我创建了一个存储过程,其中一个参数为VarBinary(MAX),应该能够超过8k字节,但是当我发送更多8k字节时,我收到错误消息“[ SQL Server Native Client 11.0]字符串数据,右截断“。
在线研究问题并没有解决我的问题,我发现可能是数据太大并且要解决它我应该将可变大小更改为MAX指示可能超过8k字节的数据
这是试用版VBA代码,用于将存储过程与图像一起使用:
Dim Connection As New ADODB.Connection
Dim strm As new ADODB.stream
strm.Type = adTypeBinary
strm.Open
strm.LoadFromFile "C:\out.png"
strm.Position = 0
Connection.Open 'Connection string that should not be published'
If Connection.State = 1 Then
Dim cmd As New ADODB.command
Set cmd.ActiveConnection = Connection
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "InsertImage"
cmd.Parameters("@image").Size = -1
cmd.Parameters("@image").Value = strm.Read
If Not IsNull(cmd.Parameters("@image").Value) Then cmd.Execute ' Crushes on execute
End If
这是存储过程:
USE [Supply]
GO
ALTER PROCEDURE [dbo].[InsertImage]
(
@image as VARBINARY(MAX)
)
AS
BEGIN
INSERT INTO Images values(@image)
SELECT Scope_Identify()
END
当使用少于8k字节的图像时,上述过程可以正常工作,或者在SQL Server Management Studio中执行以下脚本时图像权重超过8k字节:
INSERT INTO Images
SELECT * FROM OPENROWSET(BULK 'C:\out.png', SINGLE_BLOB) as img
答案 0 :(得分:0)
最后,我使用上面的存储过程来"初始化"数据库中的图像,然后创建另一个接收图像ID和更多数据的过程,然后连接数据与数据连接,同时添加表老化机制,以便数据不会再次更改并破坏图像数据库中。