I\'m reading an Excel file with OLDB Connection using this code
var connectionString = string.Format(\"Provider=Microsoft.Jet.OLEDB.4.0; data source={0};
Check the first examples here: http://www.connectionstrings.com/excel
What often goes wrong is that Excel will estimate the type of a column based upon the first X rows. When after that the values don't match, these rows get empty values. I'm afraid that going into the registry is sometime the only way to get the Excel driver to scan all rows first (as described in the connectionstrings.com article).
Play around with the HDR and IMEX settings in your environment. In some cases that will help as well.