2017-05-17 5 views
0

Ich habe ein Skript, das eine Datei (normalerweise Bild oder PDF) von einem SQL-Array und wenn Notwendig dekomprimiert es und kopiert dann seinen Inhalt in eine andere Zelle. Aus Gründen, die ich nicht verstehe, schlägt das Programm für einige unkomprimierte Dateien mit dem Fehler fehl: Unable to cast object of type 'Microsoft.SqlServer.Dts.Pipeline.BlobColumn' to type 'System.Byte[]'..Objekt des Typs 'Microsoft.SqlServer.Dts.Pipeline.BlobColumn' konnte nicht in 'System.Byte []' umgewandelt werden

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    if (Row.bitCompressed) 
    { 

     byte[] inputData = Row.imgFileContent.GetBlobData(0, (int)Row.imgFileContent.Length); 
     Row.FileImageOut.AddBlobData(Decompress(inputData)); 

    } 
    else 
    { 

     Row.FileImageOut = Row.imgFileContent; <--- ERROR 
    } 
} 

Die Row.FilmeImageOur ist ein Microsoft.SqlServer.Dts.Pipeline.BlobColumn Input0Buffer.FileImageOut während Row.imgFileContent ein Microsoft.SqlServer.Dts.Pipeline.BlobColumn Input0Buffer.imgFileContent ist.

Bei der Suche nach der Lösung habe ich this gefunden, aber ich verstehe nicht wirklich diese Jungs Lösung und wenn es sogar anwendbar ist. Ich versuchte mit addBlobData anstelle von =, aber es erfordert byte Eingabe anstelle von Blob Daten. Ich kann keine Funktionen finden, mit denen wir Blobdaten Blobdaten zuweisen können.

Antwort

0

Ändert meine else Code zu diesem, scheint zu arbeiten, obwohl es auch scheint, ziemlich ineffizient. Zuerst erhalte ich Blob-Daten in einem Byte-Array, dann gebe ich dieses Array in Add-Blob-Daten ein. Die Tatsache, dass ich diese Werte manchmal nicht einfach zuweisen kann (wie es nur manchmal bricht) scheint mir ein Fehler zu sein

else 
    { 
     byte[] copyData = Row.imgFileContent.GetBlobData(0, checked((Int32)Row.imgFileContent.Length)); 
     Row.FileImageOut.AddBlobData(copyData, checked((Int32)Row.imgFileContent.Length)); 
    } 
Verwandte Themen