如何使用DTS将SqlServer中的二进制数据导出到文件

时间:2009-02-18 16:50:06

标签: sql-server vbscript dts

我在sql server 2000表中有一个image列,用于存储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 关键字。

还有其他想法吗?

2 个答案:

答案 0 :(得分: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”并使用此代码来获取actual messages

For Each err In rs.ActiveConnection.Errors
    WScript.Echo err.Number & ": " & err.Description
Next

答案 1 :(得分:0)

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

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