【发布时间】:2018-03-08 22:23:05
【问题描述】:
装备: 微软访问 2016, SQL Server 2014
语言: VBA, T-SQL
问题: 该项目是一个“商店”,它使用 MS ACCESS 作为前端连接到 SQL Server,当向数据库(SQL Server 数据库)添加项目时,我还需要添加项目的图像。所以我在此之前要做的是能够将独立图像添加到数据库中的图像表中,该表有 2 个字段,一个 AUTO id 作为整数,ImageData 作为 VARBINARY(MAX)。
为了向数据库添加图像,我创建了一个存储过程,其中一个参数为 VarBinary(MAX),应该能够超过 8k 字节,但是当我发送更多 8k 字节时,我收到错误消息“[ SQL Server Native Client 11.0]字符串数据,右截断”。
在线研究问题并没有解决我的问题,我发现可能是数据太大,要解决它我应该将可变大小更改为可能超过 8k 字节的数据的 MAX 指示
这是使用带有图像的存储过程的试用 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
【问题讨论】:
标签: sql-server ms-access vba