我在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 关键字。
还有其他想法吗?
答案 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数据源并将导出的输出指向文件。