2017-05-17 26 views
0

SQL配列からファイル(通常はimageまたはpdf)を取得するスクリプトがあります。必要に応じて解凍し、その内容を別のセルにコピーします。しかし、私が理解していない理由のため、プログラムは圧縮されていないファイルではエラー:Unable to cast object of type 'Microsoft.SqlServer.Dts.Pipeline.BlobColumn' to type 'System.Byte[]'.で失敗します。'Microsoft.SqlServer.Dts.Pipeline.BlobColumn'型のオブジェクトを型 'System.Byte []'にキャストできません

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 
    } 
} 

Row.FilmeImageOurRow.imgFileContentMicrosoft.SqlServer.Dts.Pipeline.BlobColumn Input0Buffer.imgFileContentであるMicrosoft.SqlServer.Dts.Pipeline.BlobColumn Input0Buffer.FileImageOutあります。

解決策を探すときに私はthisを見つけましたが、私はこの人の解を本当に理解していません。 =の代わりにaddBlobDataを使用しようとしましたが、BLOBデータの代わりにbyteの入力が必要です。私は、BLOBデータをBLOBデータに割り当てることを可能にする関数を見つけることができないようですか?

答えて

0

私のelseコードをこれに変更したところ、かなり効率が悪いようですが、うまくいくようです。まず、BLOBデータをバイト配列に取得し、そのBLOBデータをBLOBデータに追加します。私は単に時々(時には壊れてしまう)これらの値を単に割り当てることができないという事実は、私にはバグのようです。

else 
    { 
     byte[] copyData = Row.imgFileContent.GetBlobData(0, checked((Int32)Row.imgFileContent.Length)); 
     Row.FileImageOut.AddBlobData(copyData, checked((Int32)Row.imgFileContent.Length)); 
    } 
関連する問題