1

我在 sql server 2000 表中有一个图像列,用于存储 pdf 文件的二进制文件。

我需要使用 SqlServer 2000 DTS 将列中每一行的内容导出到一个实际的物理文件中。

我在http://www.freevbcode.com/ShowCode.asp?ID=1654&NoBox=True找到了以下 vb 方法

Set rs = conn.execute("select BinaryData from dbo.theTable")
FileHandle = FreeFile 
Open ("AFile") For Binary As #FileHandle 
ByteLength = LenB(rs("BinaryData")) 
ByteContent = rs("BinaryData").GetChunk(ByteLength)
Put #FileHandle, ,ByteContent 
Close #FileHandle

不幸的是,DTS 脚本任务是 VBSCript,而不是 VB,并且它在第三行中抛出了AS关键字。

还有其他想法吗?

4

2 回答 2

1

在 VBScript 中编写二进制文件是一项非常困难的任务。VBScript 公开的唯一直接文件操作存在于 FileSystemObject 对象中,该对象仅支持写入文本文件。唯一可行的选择是使用ADO Stream objects,这仍然很麻烦,因为 VBScript 不支持将脚本创建的 Byte 数组传递给 COM 对象,这是能够写入任意二进制数据所必需的。

这是一种使用 ADO 流的技术,它可能不起作用,但可能会让您走上正确解决方案的轨道。

adTypeBinary = 1

Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT binary_data FROM dbo.data_table", "connection string..."
Set strm = CreateObject("ADODB.Stream")
strm.Type = adTypeBinary
strm.Open
strm.Write rs.Fields("binary_data").GetChunk( _
    LenB(rs.Fields("binary_data").Value))
strm.SaveToFile "binarydata.bin"
strm.Close
rs.Close

我使用 Access 试验了这段代码,不幸的是它似乎没有用。我没有得到与我创建的表中相同的二进制数据,但我没有费心进入十六进制编辑器看看有什么不同。

如果您从 ADO 操作中得到错误,您可以通过在脚本顶部添加“On Error Resume Next”并使用此代码来获取实际消息。

For Each err In rs.ActiveConnection.Errors
    WScript.Echo err.Number & ": " & err.Description
Next
于 2009-02-19T02:24:23.740 回答
0

如果可能的话,我会使用 SQL Server Integration Services (SSIS) 而不是 DTS,并使用允许您使用 VB.NET 的脚本任务。

您可以连接到 SQL Server 2000 数据源并将导出的输出指向一个文件。

于 2009-02-18T20:31:14.603 回答