Implementing SQL FILESTREAM Part II

Last month I wrote about enabling SQL FILESTREAM with ILINX Content Store. After discussing this with a few people, I think I should share some more information and reiterate a couple points.

For Existing Applications:
As I mentioned before, the decision to enable FILESTREAM should be done during the planning phase. If you perform this process on an application with a lot of content, it can be a very time costly endeavor with a big performance impact to the server. Also, after the move from BLOB to FILESTREAM, you could have a fragmented database. The BLOB to FILESTREAM process can definitely be done on an existing system, just be sure to plan accordingly and allow for sufficient time.

After step #10 of my previous blog post (all the data is copied and you have deleted the BLOB column), you will notice that the database file size hasn’t decreased. This is remedied easily enough be executing a DBCC CLEANTABLE command. The DBCC CLEANTABLE command will reclaim the space from the dropped variable length column. For example, if your database is named ILINX_CS and your application is named Sample Application, the query to do this is:

DBCC CLEANTABLE ('ILINX_CS','[dbo].[Sample Application]',10000) Continue reading

Storing content outside of SQL Server for ILINX Content Store using SQL FILESTREAM

By design, ILINX Content Store stores documents within the SQL database as BLOBs. There are many advantages to this design (security, performance, etc.) but sometimes there is a reason to store the documents outside of the SQL database. SQL Server has a method to do this called FILESTREAM. FILESTREAM integrates SQL Server with the NTFS file system by storing varbinary(max) data outside of the SQL database. FILESTREAM uses the NT system cache for caching file data: this helps reduce any effect that FILESTREAM data might have on Database Engine performance. The SQL Server buffer pool is not used; therefore, this memory is available for query processing.

One of the main reasons to implement FILESTREAM would be because your documents are generally larger than 1MB in size, storing them outside the database can have a performance advantage. If these are TIFF documents, then this 1MB threshold would be on a per-page basis. This is due to how ILINX Content Store stores TIFF documents. By design, ILINX Content Store splits multipage TIFFs into single pages to allow for users to perform actions on single pages of a document: things like a reorder of pages, single page delete, or rotation. Continue reading

Registering DLLs in COM with WiX for creating an MSI installation package for a Kofax Custom Panel

I was working on a project recently for a customer that was upgrading their Kofax versions and making some enhancements to a custom Kofax panel that we had written for them some time ago. Like any good developer, I migrated the code for the custom panel to the latest version of Visual Studio I had, (in this case, Visual Studio 2012). I had finished development and was discussing installation when the customer requested an MSI package to install the custom panel. Unbeknownst to me, Visual Studio 2012 had dropped their support for the easy, drag and drop, built in set up and deployment project to create MSI’s.

In doing some research, I found many developers had migrated to using the open source WiX product to create MSI packages, ( One can download WiX and integrate it directly into Visual Studio. Everything was fairly straight forward on following their tutorials except for one snag: in order to get the custom Kofax panel to install correctly, I had to register the custom DLLs as COM Components, not in the GAC. After a lot of head scratching, I finally figured out that I could use Heat (one of the WiX tools) to create a registry file of the DLLs to include in my WiX set up project. You can find out more about Heat here: After the file was generated I was able to take the output of the Heat generated file and include it in my WiX install project to register the necessary DLLs. To do this, I followed these steps: Continue reading

How to troubleshoot SQL error [3566] & open applications in Kofax 10

I recently worked with a customer who was receiving the error below on a Client/Server installation with a standalone SQL instance (not built-in):

[3566] KdoLib: Network I/O error: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (Provider: SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specified) (-1)

After performing a clean install of Kofax 10 on a new workstation, they were unable to open Batch Manager, Administration, etc. The process could be seen in Task Manager, but the window would not open, and after about 20 minutes would show the error above.

To resolve this we first tested the connection to the SQL server using a .udl file. This can be done by creating a blank text file, then renaming the extension to .udl.

Open this new Data Link and fill in the fields for your SQL server and test the connection. If you do not get a success, verify that your server name, login, firewall, etc. are configured properly to access the server. Continue reading

An Explanation of SQL Joins

Recently I had to analyze several Stored Procedures and Views in SQL 2008 to find out why a process had stopped working. Many of you have had to do the same thing and this stuff gets complicated. So along with my several pages of notes I found this article particularly useful. This is the best representation and explanation of SQL Joins I have found and wanted to share.

Andrew Skovran
Support Engineer
ImageSource, Inc.

Learn how to add Server Side Extensions to a workflow in ILINX 6.0

ImageSource recently announced the release of ILINX 6.0. The new version of ILINX Capture includes a workflow IXM (ILINX Extension Module) that allows a C# programmer to add their own code to the workflow. As a Sr. Systems Engineer for ImageSource, I would like to give you a quick overview of how to setup and add the code so that you can perform this action yourself.

Once ILINX Capture 6.0 is installed, you should find a subfolder under the install folder (c:\Program Files\ImageSource\ILINX Capture) named “Sample Code”. This subfolder contains a zip file that you can use to unzip the contents to a folder on your hard drive. You can then use the provided Visual Studio shell (Visual Studio Express 2013 for Windows Desktop is free) to open and code/de-bug/build the Server Side Extension. The files listed in the zip file are:

As you can see, there is a solution file that you can open in Visual Studio Express 2013 for Windows Desktop that will allow you to access the layout for each section listed. When you open this file you will get Continue reading