I've found a technique to efficiently exchange information between a script component and the host SSIS package. I always use package level variables as I have not seen nor heard of any reason to use component level variables. I don't use the readonly/writeonly variables in the script task editor. Instead I use the following VB code:
I thought I would share the component I use to create the digital fingerprint.
It uses the native .Net libraries and performs quite fast. The Row object is how you interact with the incoming stream. The outbound column name is Fingerprint, defined in the output tab as DT_BYTES with a size of 20. FileData is defined as a DT_IMAGE input column. You will have to add the Fingerprintto the output stream before you can use it within the script component.
I helped develop an application that stores documents within SQLServer (v2005) and are then retrieved for use by a web-based front end. I had the task of co-developing the back end pieces; table structures, indexes, relationships, and anSSISpackage to manage the load. The design is straight forward: Documents are stored in a varbinary column with ancillary data stored in additional tables to facilitate look ups. The current document form is a .pdf around 80k each. The current logic states that we keep only one copy of a given document and the first copy we get is the one we keep. It is easy to maintain in that I do a look up in the ancillary tables prior to loading up the "new" .pdf and if this document exists, I don't bother loading up the new one. Then came the curve.