Sql server SQL Server的SQL Server本机客户端/ODBC驱动程序&DAO无法将blob>8k插入varbinary(MAX)字段

Sql server SQL Server的SQL Server本机客户端/ODBC驱动程序&DAO无法将blob>8k插入varbinary(MAX)字段,sql-server,tsql,vb6,odbc,dao,Sql Server,Tsql,Vb6,Odbc,Dao,考虑下表: 使用[MyTestDb] 去 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 创建表[dbo]。[MyTable] [ID][int]标识1,1不为空, [FileBlob][varbinary]最大为空, 约束[PK_MyTable]主键群集 [ID]ASC 在PAD\u INDEX=OFF、STATISTICS\u norecocomputer=OFF、IGNORE\u DUP\u KEY=OFF、ALLOW\u ROW\u LOCKS=ON、ALLOW\u PA

考虑下表:

使用[MyTestDb] 去 将ANSI_空值设置为ON 去 在上设置带引号的\u标识符 去 创建表[dbo]。[MyTable] [ID][int]标识1,1不为空, [FileBlob][varbinary]最大为空, 约束[PK_MyTable]主键群集 [ID]ASC 在PAD\u INDEX=OFF、STATISTICS\u norecocomputer=OFF、IGNORE\u DUP\u KEY=OFF、ALLOW\u ROW\u LOCKS=ON、ALLOW\u PAGE\u LOCKS=ON[PRIMARY]的情况下 在[PRIMARY]文本上图像在[PRIMARY]上 去 在这里,我想将PDF文件作为二进制blob插入:

函数FileToBlobFilePath作为字符串作为字节 将文件设置为整数 Dim FileBlob作为字节 File=FreeFile0 打开二进制访问的文件路径读取为文件 ReDim filebloffile-1 获取文件,FileBlob 关闭文件 FileToBlob=FileBlob 端函数 专用子命令1_单击 关于错误转到ErrHdl Dim数据库作为DAO.Database 设置db=DBEngine0.OpenDatabase,False,False,ODBC;驱动程序={ODBC驱动程序13 for SQL Server};服务器=本地;数据库=MyTestDb;可信连接=是;DataTypeCompatibility=80 作为DAO.Recordset的Dim rec Set rec=db.OpenRecordsetMyTable、dbOpenDynaset、dbSeeChanges rec.AddNew 记录![FileBlob]=filetoblod:\TestFile.pdf 记录更新 记录结束 db.关闭 出口接头 ErrHdl: 我想我会坚持多久 如果i=0,则返回错误。计数-1 调试。打印错误。编号,错误。说明 接下来我 端接头 当rec.Update运行时,错误处理程序将打印以下输出:

0[Microsoft][ODBC驱动程序13 for SQL Server]字符串数据,对吗 截断

3146 ODBC调用失败

我注意到以下更改导致blob成功插入:

使用大小的文件时,需要将DataTypeCompatibility设置为0。80表示您仅限于Sql Server 2005数据类型,其中不包括MAX类型

OLE DB和ADO应用程序可以将DataTypeCompatibility连接字符串关键字与SQL Server本机客户端一起使用,以操作较旧的数据类型。当DataTypeCompatibility=80时,OLE DB客户端将使用SQL Server 2005表格数据流TDS版本而不是TDS版本进行连接。这意味着,对于SQL Server 2008及更高版本的数据类型,将由服务器执行下层转换,而不是由SQL Server本机客户端执行。这还意味着连接上可用的功能将仅限于SQL Server 2005功能集


DAO看到的FileBlob字段的类型是什么?Debug.Print rec.FieldsFileBlob.type prints 11,根据站点,它解析为dbLongBinary。您尝试过吗?不幸的是,同样的结果。我将blob拆分为多个8k字节数组,并通过AppendChunk逐个添加它们。但是,最后一次调用rec.Update失败,并显示相同的错误消息。如果只追加一个8k字节数组,则update命令会成功。不幸的是,错误仍然存在。编辑DataTypeCompatibility=0的连接字符串或完全删除DataTypeCompatibility会导致相同的行为。