2009-02-18 11 views
1

J'ai une colonne d'image dans une table sql server 2000 qui est utilisée pour stocker le binaire d'un fichier pdf.Comment exporter des données binaires dans SqlServer vers un fichier à l'aide de DTS

Je dois exporter le contenu de chaque ligne de la colonne vers un fichier physique réel en utilisant SqlServer 2000 DTS.

Je trouve la méthode suivante pour vb à http://www.freevbcode.com/ShowCode.asp?ID=1654&NoBox=True

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 

Malheureusement, la tâche de script DTS est VBscript, pas VB, et il jette sur le AS mot-clé dans la troisième ligne.

D'autres idées?

Répondre

0

J'irais avec SQL Server Integration Services (SSIS) au lieu de DTS, si possible, et utiliser une tâche de script qui vous permettrait d'utiliser VB.NET.

Vous pouvez vous connecter à votre source de données SQL Server 2000 et pointer la sortie exportée vers un fichier.

+0

Impossible pour le moment. C'est Sql Server 2000 et les systèmes hérités. – Nathan

1

L'écriture de fichiers binaires est une tâche notoirement difficile dans VBScript. Les seules opérations de fichiers directes exposées par VBScript se trouvent dans l'objet FileSystemObject, qui ne prend en charge que l'écriture de fichiers texte. La seule option viable consiste à utiliser ADO Stream objects, ce qui est encore fastidieux car VBScript ne prend pas en charge la transmission de tableaux Byte créés par script aux objets COM, ce qui est nécessaire pour pouvoir écrire des données binaires arbitraires.

Voici une technique utilisant des flux ADO qui ne fonctionnera probablement pas mais qui pourrait vous mettre sur la bonne voie. J'ai expérimenté avec ce code en utilisant Access, et malheureusement, il ne semblait pas fonctionner. Je n'ai pas obtenu les mêmes données binaires que dans la table que j'ai créée, mais je n'ai pas pris la peine d'aller dans un éditeur hexadécimal pour voir ce qui était différent.

Si vous obtenez des erreurs d'une opération ADO, vous pouvez obtenir le actual messages en ajoutant un "On Error Resume Next" au début du script et en utilisant ce code.

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

Lorsque je l'exécute sur Sql Server 2000, sur la ligne: strm.Write rs.Fields ("PdfBytes"). GetChunk (LenB (rs.Fields ("PdfBytes"). Value)) J'ai l'erreur: "Multi- Fournisseur d'OLE DB d'étape pour les pilotes ODBC - l'opération OLE DB multi-étape a généré des erreurs ". – Nathan

+0

J'aimerais pouvoir être plus utile, mais je pense qu'il est probable que ce que vous voulez faire soit impossible avec VBScript. J'ai ajouté quelques informations sur la façon d'obtenir les erreurs d'une opération ADO si vous voulez le vérifier, sinon je recommanderais d'explorer différentes approches. – Tmdean